0

我有一个UIView里面有按钮的。按钮不在某个数组中。

我想查看整个UIView(使用for循环)并通过其标题查找按钮,然后将其删除。

- (void)removeButtonByTitle:(NSString*)name
{
    for (buttons in view) {
        // find the button with the name "name" and remove it from the view 
    }
}

如果不将它们的名称/指针保存到数组,我找不到这样做的方法。

4

4 回答 4

3

通常最好为此使用该tag属性。然后,如果您决定更改按钮标题或本地化您的应用程序,您可以简单地使用该方法找到按钮,viewWithTag:而不必调整您的代码。

如果你真的需要通过标题找到一个按钮,你可以这样做:

NSString *buttonTitle = @"name";
UIButton *buttonWithTitle = nil;
for (UIButton *button in view.subviews) {
    if (![button isKindOfClass:[UIButton class]]) continue;
    if ([[button currentTitle] isEqualToString:buttonTitle]) {
        buttonWithTitle = button;
        break;
    }
}
//do something with the button...
于 2013-04-28T07:02:28.083 回答
1

那么你可以这样做:

for (UIView *v in view.subviews)
    if ([v isKindOfClass:[UIButton class]] && [[(UIButton *)v currentTitle] isEqualToString:@""])
        //remove

但我必须说这听起来不像是一个强大的解决方案,您的按钮标题可能会在本地化过程中发生变化,或者对于不同的状态可能会有所不同。

于 2013-04-28T07:00:50.590 回答
1

去做:

- (void)removeButtonByTitle:(NSString *)name
{
  for (UIView *tempView in self.subviews)
    {
       if ([tempView isKindOfClass:[UIButton class]]) // make sure it's actually a UIButton
         { 
              UIButton *button = tempView;
              if ([button.titleLabel.text isEqualToString:name])  // compare the title
                 {
                    [button removeFromSuperview];
                 }
         }
    }
 }
于 2013-04-28T07:00:59.037 回答
0

检查这个:

-(void)removeButtonWithTitle:(NSString*)titleString {
NSArray *subViews = [self.view subviews];
[subViews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if([obj isKindOfClass:[UIView class]]) {
        NSArray *subViewsArray = [(UIView*)obj subviews];
        for (int i=0; i<[subViewsArray count]; i++) {
            id subViewObj = [subViewsArray objectAtIndex:i];
            if([subViewObj isKindOfClass:[UIButton class]] && [[(UIButton*)subViewObj titleLabel].text isEqualToString:titleString]) {
                [subViewObj removeFromSuperview];
                *stop = YES;
                break;
            }
        }
    }
}];
}
于 2013-04-28T07:15:16.257 回答