首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何快速地从视图中获取所有文本字段

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

Stack Overflow用户
提问于 2016-12-01 10:40:56
回答 8查看 8.6K关注 0票数 12

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

代码语言:javascript
运行
复制
 override func viewDidLoad() 
{
    super.viewDidLoad()

    /** setting bottom border of textfield**/

    for case let textField as UITextField in self.view.subviews {
        textField.setBottomBorder()
    }
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-12-01 11:07:44

我让它起作用了,但仍然需要解释为什么有问题的代码不能运行

我从论坛的某个地方得到的,不能精确地相信答案。

代码语言:javascript
运行
复制
/** 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中调用上述函数。

代码语言:javascript
运行
复制
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

/** setting bottom border to the textfield **/
    let allTextField = getTextfield(view: self.view)
    for txtField in allTextField
    {
        txtField.setBottomBorder()
    }
}
票数 10
EN

Stack Overflow用户

发布于 2018-01-10 07:52:20

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

代码语言:javascript
运行
复制
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})
}

使用:

代码语言:javascript
运行
复制
getAllTextFields(fromView : self.view).forEach{($0.text = "Hey dude!")}

一般方法:

代码语言:javascript
运行
复制
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})
}

用法:

代码语言:javascript
运行
复制
 let textFields: [UITextField] = getAllSubviews(fromView: self.view)
票数 17
EN

Stack Overflow用户

发布于 2017-12-20 05:41:39

延期:

代码语言:javascript
运行
复制
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)
            }
        }
    }
}

用法:

代码语言:javascript
运行
复制
view.viewOfType(type:UITextField.self) {
        view in

        view.text = "123"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40908471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档