我想在我的UIViewController中获取所有视图。
我正在使用此代码:
for subview : UIView in self.view.subviews{
//code here
}
问题是我没有得到UIView内部的视图。 除了他们的孩子,我得到了所有的看法。
请问,我怎样才能在UIViewController中获得所有子视图或父视图?即使视图中有一个孩子有孩子也有孩子。我想通过所有观点。
预先thanx:)
(请在swift 4.0中)
答案 0 :(得分:2)
您需要递归处理所有子视图。
func processSubviews(of view: UIView) {
// 1. code here do something with view
for subview in view.subviews {
// 2. code here do something with subview
processSubviews(of: subview)
// 3. code here do something with subview
}
// 4. code here do something with view
}
您需要将代码放在1,2,3或4位置(或者可能是两个或更多位置),具体取决于您想要的结果。
然后您可以将其称为:
processSubviews(of: self.view)
答案 1 :(得分:0)
要获取视图层次结构中的所有视图(如Label,Button,View等),并访问viewController中的所有子视图,应使用递归函数来迭代所有视图:
func getAllSubviews(view:UIView) {
for subview in view.subviews {
if let takenLabel = subview as? UILabel {
takenLabel.backgroundColor = UIColor.red
}
getAllSubviews(view:subview)
}
}
您可以使用此功能访问按钮之类的其他视图并进行更改。
在这种情况下,我将viewController中所有标签的背景颜色更改为红色
答案 2 :(得分:0)
要获取父视图中的所有子视图
for subview in view.subviews{
// you can get all of your views one by one here.
}
要过滤是否有任何标记的视图(假设该视图被100标记)
view.subviews.filter{$0.tag == 100}
用于检查“任意”视图是否包含子视图的扩展
extension UIView{
func isAvailabletoParentView(inParentView : UIView, subViewTag : Int) -> Bool{
var isAvailable = false
for subviews in inParentView.subviews{
if subviews.tag == subViewTag{
isAvailable = true
return true
}else{
isAvailable = false
}
}
return isAvailable
}
}
像
这样的电话额外信息subview.isAvailabletoParentView(inParentView: parentView, subViewTag: anyTagToSubView)
希望对您有所帮助,祝您编码愉快。