如何找到视图包含的子视图对象类型?

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.countfilter.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
   

【讨论】:

以上是关于如何找到视图包含的子视图对象类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何切换数组中对象的属性并更新 SwiftUI 视图?

在 NavigationIOS 中推送视图时如何传递对象而不是类型?

从子视图中的路径对象在 UIView 中构建剪辑区域

loadNibNamed 方法太慢 - 如何让它更快?

将核心数据对象传递给 didSelectRowAtIndexPath 上的子视图

django-视图