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

Kun*_*mar 10 textfield ios swift

我有一个超过15的观点UITextFields.我必须为所有人设置bottomBorder(扩展名)UITextFields.我可以为所有人UITextFields和它的工作一个接一个地设置它.我想UITextFields一次为所有人设置底部边框.这是我正在尝试的代码,但似乎for循环没有执行.我甚至尝试过,viewDidLayoutSubViews但是循环也不在那里执行.

 override func viewDidLoad() 
{
    super.viewDidLoad()

    /** setting bottom border of textfield**/

    for case let textField as UITextField in self.view.subviews {
        textField.setBottomBorder()
    }
}
Run Code Online (Sandbox Code Playgroud)

Gur*_*ngh 14

Swift:此函数将返回视图中的所有文本字段.无论任何子视图中是否存在字段.;-)

func getAllTextFields(fromView view: UIView)-> [UITextField] {
    return view.subviews.flatMap { (view) -> [UITextField]? in
        if view is UITextField {
            return [(view as! UITextField)]
        } else {
            return getAllTextFields(fromView: view)
        }
    }.flatMap({$0})
}
Run Code Online (Sandbox Code Playgroud)

用法:

_=getAllTextFields(fromView : self.view).map{($0.text = "Hey dude!")}
Run Code Online (Sandbox Code Playgroud)


Kun*_*mar 8

我让它工作,但仍然需要解释为什么有问题的代码不起作用
我从论坛的某个地方得到它,而不是完全能够归功于答案.

/** 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  
Run Code Online (Sandbox Code Playgroud)

在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()
    }
}
Run Code Online (Sandbox Code Playgroud)