我有一个Map<NameWrapper, List<Person>> group = persons.stream()
.collect(Collectors.groupingBy(p -> new NameWrapper(p.getName())));
,我想解析该视图的所有子视图并返回类型为UIView
的子视图的实例
使用CustomClass
只能访问直接子视图,我想解析所有子视图并返回符合条件的子视图。
view.subviews
我知道我需要递归地解决此问题,但是我确信该视图仅存在一个实例,因此一旦找到该实例,我将要返回并中断递归。
我怎么能做到这一点。
答案 0 :(得分:0)
func findView(key: String, view: UIView) -> UIView? {
for subview in view.subviews {
if subview.key == key {
return subview
} else {
return findView(key: key, view: subview)
}
}
return nil
}
注意:键未在UIView上定义,因此定位逻辑假定您已通过协议或扩展名定义了
答案 1 :(得分:0)
这是带有View标签的功能,您可以将其替换为唯一键。
func findView(tag :Int, view : UIView) -> UIView? {
if view.tag == tag {
return view
}
for subview in view.subviews {
if let v = findView(tag: tag, view: subview) {
return v
}
}
return nil
}
答案 2 :(得分:0)
您要使用uniqueKey为自定义视图提供资金,然后使用以下函数根据需要获取结果。
func findView(key : uniqueKey , view : UIView) -> customView? {
var fondSubview:customView!
for subview in view.subviews {
if subview.uniqueKey == key {
fondSubview = subview as! customView
break
}
}
return fondSubview
}
答案 3 :(得分:0)
您可以使用此通用UIView扩展方法查找特定类的任何对象。如果该类不存在子视图,则返回nil。
extension UIView {
func find<T:UIView>(_ ofType:T.Type) -> T? {
if let test = subviews.first(where: { $0 is T }) as? T {
return test
} else {
for view in subviews {
return view.find(ofType)
}
}
return nil
}
}
用法
let firstBtn = self.view.find(UIButton.self)