我有一个超过15 UITextFields的视图。我必须为所有的bottomBorder设置UITextFields (扩展名)。我可以为所有的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()
}
}发布于 2016-12-01 11:07:44
我让它起作用了,但仍然需要解释为什么有问题的代码不能运行。
我从论坛的某个地方得到的,不能精确地相信答案。
/** 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()
}
}发布于 2018-01-10 07:52:20
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})
}使用:
getAllTextFields(fromView : self.view).forEach{($0.text = "Hey dude!")}一般方法:
func getAllSubviews<T: UIView>(fromView view: UIView)-> [T] {
return view.subviews.map { (view) -> [T] in
if let view = view as? T {
return [view]
} else {
return getAllSubviews(fromView: view)
}
}.flatMap({$0})
}用法:
let textFields: [UITextField] = getAllSubviews(fromView: self.view)发布于 2017-12-20 05:41:39
延期:
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"
}https://stackoverflow.com/questions/40908471
复制相似问题