关于ios:如何检查子视图是否为按钮

How to check if subview is button or not

我正在开发一个应用程序。在那里我得到了 UITableViewCell.

的所有子视图

这个的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    (void)listSubviewsOfView:(UIView *)view {

    // Get the subviews of the view
         NSArray *subviews = [view subviews];

    // Return if there are no subviews
    if ([subviews count] == 0) return;

    for (UIView *subview in subviews) {

        NSLog(@"%@", subview);

        // List the subviews of subview
        [self listSubviewsOfView:subview];
    }
}

但我的问题是如何从该子视图列表中找出按钮。请告诉我如何解决这个问题。


你可以像这样遍历所有的子视图。

1
2
3
4
5
for (id subview in subviews) {
   if ([subview isKindOfClass:[UIButton class]]) {
      //do your code
   }
}

斯威夫特

1
2
3
4
5
for subview in view.subviews {
    if subview is UIButton {
        // this is a button
    }
}

检查子视图是否为带有 is AnyClassisKind(of aClass: AnyClass) 或 isMember(of aClass: AnyClass) API 的按钮。

使用 is-

1
2
3
4
5
for subview in self.view.subviews{
      if subview is UIButton{
            //do whatever you want
      }
}

使用 isMember(of:)-

1
2
3
4
5
for subview in self.view.subviews{
     if subview.isMember(of: UIButton.self){
          //do whatever you want
     }
}

使用 isKind(of:)-

1
2
3
4
5
for subview in self.view.subviews{
    if subview.isKind(of: UIButton.self){
        //do whatever you want
    }
}

扩展 Martin 的回答中的"做你的代码"部分。获得子视图后,我想测试它是否是正确的按钮,然后将其删除。我无法使用 subview.titleLabel 直接检查按钮的 titleLabel 所以我将子视图分配给 UIButton 然后检查按钮的 titleLabel.

1
2
3
4
5
6
7
8
9
10
- (void)removeCheckboxes {

    for ( id subview in self.parentView.subviews ) {
        if ( [subview isKindOfClass:[UIButton class]] ) {
            UIButton *checkboxButton = subview;
            if ( [checkboxButton.titleLabel.text isEqualToString:@"checkBoxR1C1"] )    [subview removeFromSuperview];
        }
    }

}