你好我想知道我如何能够一般性地定义可以应用于我工作的特定UITextFields
中的所有UIViewController
的函数。让我们说如果我有10个文本字段和我希望所有这些都被隐藏,或者选择虚假或真实。我不想写这样的文本域
textField1.hidden = true
textField2.hidden = true
textField3.hidden = true
etc etc
希望你理解我的问题
答案 0 :(得分:3)
var hidden = true { didSet { view.subviews.forEach { ($0 as? UITextField)?.hidden = hidden } } }
当您更改hidden
答案 1 :(得分:1)
您可以使用这样的函数递归查找视图中的所有UITextField实例。将包含UITextField的最高级别视图或包含UITextFields的视图(因为这是递归的)作为视图参数传递;
func getTextFieldsInView(view: UIView) -> [UITextField] {
var arrayTextFields = [UITextField]()
for subview in view.subviews {
arrayTextFields += getTextFieldsInView(subview)
if let subview = subview as? UITextField {
arrayTextFields.append(subview)
//you can also do what you want here like: subview.hidden = true
}
}
return arrayTextFields
}
这样您就不必将它们逐个添加到数组中。只需将函数调用分配给变量,即可动态创建数组。
答案 2 :(得分:0)
你可以保留所有文本字段的数组,然后通过集合保存forEach。
let textFields = [textField1, textField2, textField3, textField4]
textFields.forEach { $0.hidden = true }
答案 3 :(得分:0)
如果您的文本字段位于Interface Builder中,您可以为它们创建IBOutletCollection并作为一组对它们执行操作
// Swift
@IBOutlet var semiBoldLabels: [UITextField]!
// ObjC
@property (nonatomic, strong) IBOutletCollection(UITextField) NSArray *textFields;