获取 ViewController 内的所有视图
Get ALL view inside ViewController
我正在尝试获取 UIViewController 中的所有视图。
我正在使用此代码:
for subview : UIView in self.view.subviews{
//code here
}
问题是我没有获得 UIView 内的视图。
所以除了他们的 children.
我得到了所有视图
请问,如何在我的 UIViewController 中获取 child 或 parent 的所有视图?即使视图有一个 child 有一个 child 有一个 child。我要浏览所有视图。
提前致谢:)
(请在swift 4.0)
您需要递归处理所有子视图。
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)
要获取视图层次结构中的所有视图(如标签、按钮、视图...)并访问 viewController 中的所有子视图,您应该使用递归函数来迭代所有视图:
func getAllSubviews(view:UIView) {
for subview in view.subviews {
if let takenLabel = subview as? UILabel {
takenLabel.backgroundColor = UIColor.red
}
getAllSubviews(view:subview)
}
}
您可以使用此函数访问按钮等其他视图并更改它们。
在这种情况下,我将 viewController 中所有标签的背景颜色更改为红色
获取子视图的方式有很多种
获取父视图中的所有子视图
for subview in view.subviews{
// you can get all of your views one by one here.
}
过滤是否有任何标记的视图可用(假设视图标记为 100)
view.subviews.filter{[=11=].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)
希望对您有所帮助,编码愉快。
我正在尝试获取 UIViewController 中的所有视图。
我正在使用此代码:
for subview : UIView in self.view.subviews{
//code here
}
问题是我没有获得 UIView 内的视图。 所以除了他们的 children.
我得到了所有视图请问,如何在我的 UIViewController 中获取 child 或 parent 的所有视图?即使视图有一个 child 有一个 child 有一个 child。我要浏览所有视图。
提前致谢:)
(请在swift 4.0)
您需要递归处理所有子视图。
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)
要获取视图层次结构中的所有视图(如标签、按钮、视图...)并访问 viewController 中的所有子视图,您应该使用递归函数来迭代所有视图:
func getAllSubviews(view:UIView) {
for subview in view.subviews {
if let takenLabel = subview as? UILabel {
takenLabel.backgroundColor = UIColor.red
}
getAllSubviews(view:subview)
}
}
您可以使用此函数访问按钮等其他视图并更改它们。
在这种情况下,我将 viewController 中所有标签的背景颜色更改为红色
获取子视图的方式有很多种
获取父视图中的所有子视图
for subview in view.subviews{
// you can get all of your views one by one here.
}
过滤是否有任何标记的视图可用(假设视图标记为 100)
view.subviews.filter{[=11=].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)
希望对您有所帮助,编码愉快。