如何快速从视图中获取所有文本字段
我有一个超过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" }