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

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

  override func viewDidLoad() { super.viewDidLoad() /** setting bottom border of textfield**/ for case let textField as UITextField in self.view.subviews { textField.setBottomBorder() } } 

我做了它的工作,但仍然需要解释为什么有问题的代码不工作
我从论坛上的某个地方得到了答案,而不是确切的答案。

 /** 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() } } 

尝试这个

 for aSubView: Any in self.view.subviews { if (aSubView is UITextField) { var textField = (aSubView as! UITextField) textField. setBottomBorder() } } 

或者试试这个

 for view in self.view.subviews { if (view is UITextField) { var textField = view as! UITextField textField. setBottomBorder() } } 

尝试这个 :)

 for view in self.view.subviews as! [UIView] { if let textField = view as? UITextField { textField.setBottomBorder() } } 

这对我有效。

 var textFieldsArray = [UITextField]() for view in self.view.subviews { if view is UITextField { textFieldsArray.append(view as! UITextField) } } textFieldsArray.forEach { $0.setBottomBorder() } 

如果您想要在新数组中使用函数的结果,请使用map()。

 func getTextFields() { for textField in view.subviews where view is UITextField { (textField as? UITextField).setBottomBorder() } } 

延期:

 extension UIView { func viewOfType<T:UIView>(type:T.Type, process: (_ view:T) -> Void) { if let view = self as? T { process(view) } else { for subView in subviews { subView.viewOfType(type:type, process:process) } } } } 

用法:

 view.viewOfType(type:UITextField.self) { view in view.text = "123" }