2015-05-19 17 views
1

是否有一種方法可以列出類中的所有元素,將它們存儲在Array中並設置它們的分組樣式屬性?例如,我想列出當前類中的所有文本UITextfields並設置邊框顏色,邊框寬度...我在下面找到了非常有用的代碼,但是您需要明確地附加數組中的每個元素。列出類的所有元素並將它們存儲在數組中以設置外觀屬性

// The extension code 

extension UITextField { 
    func setPreferences() { 
     self.layer.cornerRadius = 5 
     self.layer.borderColor = UIColor.grayColor().CGColor 
     self.layer.borderWidth = 1 
    } 
} 

// The following code in the class 

var theTextFields = [UITextField]() 

func setColorsAndBorders() { 

    theTextFields = [tf1, tf2, tf3, tf4] // etc 

    for item in theTextFields { 
     item.setPreferences() 
    } 
} 

// And the following code in the ViewDidLoad 

setColorsAndBorders() 

回答

0

實現這一目標的最簡單的方法,假設你的類是UIViewController,同時還利用擴展的將是這樣的:

func setColorsAndBorders() 
{ 
    for control in self.view.subviews 
    { 
     if (control is UITextField) 
     { 
      let thisControl = control as! UITextField 
      thisControl.setPreferences() 
     } 
    } 
} 

希望這有助於。

編輯: 另一種方式做同樣的事情,如果你編程創建UITextFields與此擴展名:

extension UITextField 
{ 
    convenience init(cornerRadius: CGFloat, borderColor: UIColor, borderWidth: CGFloat) 
    { 
     self.init() 
     self.layer.cornerRadius = cornerRadius 
     self.layer.borderColor = borderColor.CGColor 
     self.layer.borderWidth = borderWidth 
    } 
} 

然後你就可以,例如,以這樣的方式創建一個文本字段:

private func loadTextFields() 
{ 
    let thisField = UITextField(cornerRadius: 5, borderColor: UIColor.grayColor(), borderWidth: 1) 
    thisField.frame = CGRect(x: 0, y: self.view.frame.height/2.0, width: self.view.frame.width, height: 40.0) 
    view.addSubview(thisField) 
} 
+0

感謝您的回答!你寫的代碼不適合我。可能是因爲我的UITextfields位於Container View控制器中。事實上,我的視圖控制器有一個容器視圖控制器,我在最後一個容器視圖控制器中加載視圖... – Fox5150

+0

啊,是的,這將是原因。在這種情況下,您需要獲取對加載到最後一個容器視圖控制器的視圖的引用。這樣做的最好方法可能是創建一個'UIViewController'子類,並將Container View Controller的自定義類設置爲您的子類。然後您可以在該自定義類中執行此代碼。 – Mason

+0

我剛剛添加了一種設置'UITextField'控件的替代方法,如果您正在以編程方式將'UITextField'控件添加到最後一個容器視圖控制器中,該控件就可以工作。 – Mason

相關問題