如何找到视图包含的子视图对象类型?
Posted
技术标签:
【中文标题】如何找到视图包含的子视图对象类型?【英文标题】:How to find the kind of subview object the view is containing in it? 【发布时间】:2013-06-23 14:18:16 【问题描述】:我正在尝试查找作为 Subview 添加到 UIView 的特定类对象,但我找不到任何东西。
【问题讨论】:
【参考方案1】:for(UIView *aView in yourView.subviews)
if([aView isKindOfClass:[YourClass class]])
//YourClass found!!
【讨论】:
当有多个相同类型的视图时,这并不能解决,例如子视图中的 UILabel。尝试在视图上添加标签,稍后使用 viewWithTag 访问子视图。【参考方案2】:例如,如果您正在查找 UILabel 类类型的对象,则如下所示。
for (UIView *subView in [weeklyViewA subviews])
if ([subView isKindOfClass:[UILabel class]])
NSLog(@"label class :: %@", [subView description]);
【讨论】:
【参考方案3】:快速回答
对于这种情况,我认为我们可以使用 Swift 的first.where
语法,它比filter.count
、filter.isEmpty
更高效。
因为当我们使用filter
时,它会创建一个底层数组,因此无效,假设我们有一个很大的集合。
所以只需检查视图的subViews
集合是否包含特定类型的类,我们可以使用它
let containsBannerViewKind = view.subviews.first(where: $0 is BannerView ) != nil
相当于:在该视图的 subViews 集合中找到我与 BannerView 类的第一个匹配项。因此,如果这是真的,我们可以进行进一步的逻辑。
参考:https://github.com/realm/SwiftLint/blob/master/Rules.md#first-where
【讨论】:
【参考方案4】:这是检查解决方案的快速版本:
UITextField 示例:
for (_, view) in self.myView.subviews.enumerate()
if view.isKindOfClass(UITextField)
//Here we go
【讨论】:
【参考方案5】:在我看来。isMemberOfClass:
比isKindOfClass:
好,例如:
for (BadgeButton *button in self.subviews)
if ([button isMemberOfClass:[BadgeButton class]])
button.selected = NO;
【讨论】:
这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review @JonRose 是的,我已经改进了我的答案。【参考方案6】:斯威夫特 4.2: 你可以试试下面的代码:
let allsubviews = self.view.subviews
allsubviews.forEach (view) in
if view.isKind(of: UIScrollView.self)
//current view is UIScrollview
【讨论】:
以上是关于如何找到视图包含的子视图对象类型?的主要内容,如果未能解决你的问题,请参考以下文章
在 NavigationIOS 中推送视图时如何传递对象而不是类型?