一尘不染

如何快速从视图中获取所有文本字段

swift

我的观点超过15
UITextFields。我必须为所有设置bottomBorder(extension)UITextFields。我可以一一设置所有功能,UITextFields也可以正常工作。我想UITextFields一次设置所有的底部边框。这是我正在尝试的代码,但似乎for循环未执行。我什至尝试过,viewDidLayoutSubViews但是for循环也没有执行。

 override func viewDidLoad() 
{
    super.viewDidLoad()

    /** setting bottom border of textfield**/

    for case let textField as UITextField in self.view.subviews {
        textField.setBottomBorder()
    }
}

阅读 326

收藏
2020-07-07

共1个答案

一尘不染

我让它工作了,但是仍然需要解释 为什么有问题的代码无法工作,
我是从论坛的某个地方获得的,不能完全相信答案。

/** extract all the textfield from view **/
func getTextfield(view: UIView) -> [UITextField] {
var results = [UITextField]()
for subview in view.subviews as [UIView] {
    if let textField = subview as? UITextField {
        results += [textField]
    } else {
        results += getTextfield(view: subview)
    }
}
return results

在viewDidLoad或viewDidLayoutSubviews中调用上述函数。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

/** setting bottom border to the textfield **/
    let allTextField = getTextfield(view: self.view)
    for txtField in allTextField
    {
        txtField.setBottomBorder()
    }
}
2020-07-07