gpt4 book ai didi

ios - 如何从 XIB 实例访问 View

转载 作者:行者123 更新时间:2023-11-28 23:42:39 25 4
gpt4 key购买 nike

我有一个包含几个不同 View 元素的 .xib 文件。现在我在我的 ViewController 中创建了它的几个实例:

UINib(nibName: "\(self)", bundle: nil).instantiate(withOwner: nil, options: nil).first

现在我不确定如何访问此 UIView 中的 viewElements

我可以执行 myView.subviews() 并遍历它们。但是有没有办法通过标签获取它们,以便我可以直接从我的 xib 更改 UITextField 的文本?

最佳答案

您有几个选择。

第一个是将所有在顶层不相关的 View 放在 xib 中,然后您可以通过它们的索引访问它们。例如,如果您有一个 UIView、一个 UITextField 和一个 UILabel,按此顺序,您可以获得这样的文本字段:

let textField = UINib(nibName: "\(self)", bundle: nil).instantiate(withOwner: nil, options: nil)[1] as? UITextField

第二个选项,如果你想将你的 View 保留为 subview ,将创建一个带有 IBOutlets 的容器类作为它的 View ,将它设置为 Root View 的类,并连接 socket ,然后你会得到像这样的文本域

let textField = (UINib(nibName: "\(self)", bundle: nil).instantiate(withOwner: nil, options: nil).first as? ContainerClass)?.textFIeld

除了容器类,您还可以通过 subview 的索引访问它们。

let textField = (UINib(nibName: "\(self)", bundle: nil).instantiate(withOwner: nil, options: nil).first as? UIView)?.subviews[1] as? TextField

另一种选择是使用泛型,这个解决方案是一个聪明的 Swifty,但只有当你只有一个给定类的 View 时才有效。如果您必须输入文本字段,它将返回第一个。

func findFirstElement<T>(of kind: T.Type, in array: [Any]) -> T? {
for element in array {
if let found = element as? T {
return found
}
}
return nil
}

你明白了。您可以按原样使用它,作为遍历其内容的 UINib 的扩展,或作为查找匹配 subview 的 UIView 的扩展。

很酷的是那个对象的返回值已经是你期望的类型,缺点是它只会找到第一个。

就我个人而言,我会使用第一个选项。如果 View 不相关,我不会将它们添加为另一个 View 的 subview 。

关于ios - 如何从 XIB 实例访问 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53105805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com