在我的应用程序中,我正在为视图添加标签,然后我尝试在单击按钮时从视图中清除特定标签,并在尝试检索子视图时遇到错误:
class FirstViewController: UIViewController {
@IBAction func btnAddTask_Click(sender: UIButton){
var subViews = self.subviews.copy()
}
}
我收到错误:
'FirstViewController'没有名为'subviews'的成员
如何获取当前视图的子视图?
答案 0 :(得分:12)
UIViewController
没有subviews
属性。它具有view
属性,具有subviews
属性:
for subview in self.view.subviews {
// Manipulate the view
}
但通常这不是一个好主意。您应该将所需的标签放入IBOutletCollection
并迭代。否则,你与确切的子视图集(可能会改变)密切相关。
要创建IBOutletCollection
,请在IB中选择所需的所有标签,然后将其控制拖动到源代码中。它应该询问您是否要创建一个集合数组。 (请注意,此数组的顺序没有承诺。)
答案 1 :(得分:9)
要查看视图中的所有子视图,您可以使用以下代码:
for subview in self.view.subviews {
// Use your subview as you want
}
但是为了使用它,你必须确定你需要什么。您可以使用如下特殊标识符标记任何元素,即您创建的内容:
myButton.restorationIdentifier = "mySpecialButton";
之后你可以找到你的元素使用这个结构:
for view in view.subviews {
if (view.restorationIdentifier == "mySpecialButton") {
print("I FIND IT");
view.removeFromSuperview();
}
}
:)
答案 2 :(得分:0)
古朴典雅:
accessibilityIdentifier面向开发人员,旨在用于UI自动化。
雨燕4
@objc func handleTap(_ gestureRecognizer: UITapGestureRecognizer) {
let positionInView = gestureRecognizer.location(in: view)
let hitTestView = view?.hitTest(positionInView, with: nil)
print("hitTestView: \(hitTestView?.accessibilityIdentifier)")
}