簡體   English   中英

在子視圖中查找所有UIButton

[英]Finding all UIButtons in subviews

我的UIViewController視圖中有一個UIButton 主視圖的subview中還有十個subview視圖。 我想找到所有這些按鈕。 到目前為止,我有:

-(void)findAllButtons{

    for(UIView *view in self.view.subviews) {
        if ([view isKindOfClass:[myButton class]]){
            NSLog(@"found a button!");         
        }
    }
}

它只是找到單個按鈕,而不是其他十個。 這是為什么? 不應該迭代每個subview然后找到它們嗎?

for (UIView *subView in scroll.subviews) {
        if ([subView isKindOfClass:[UIButton class]]) {
            UIButton *btn = (UIButton*)subView;
            if (btn.tag == selectedButton.tag) {
                btn.layer.borderWidth = 1.0f;
                btn.layer.borderColor = [UIColor darkGrayColor].CGColor;
            }else{
                btn.layer.borderWidth = 1.0f;
                btn.layer.borderColor = [UIColor clearColor].CGColor;
            }
        }
    }

像這樣使用Objective-C塊的遞歸函數將在給定視圖的視圖層次結構中的測試塊中找到給定子類類型的所有視圖:

NSMutableArray *marrAllButtons = [NSMutableArray new];

BOOL (^viewTest)(UIView*) = ^BOOL(UIView* viewToTest) {

    return [view isKindOfClass:[UIButton class]];
};

void(^viewEnumerator)(UIView*) = ^(UIView* outerView){

    for (UIView *view in outerView.subviews)
    {
        if (viewTest(view))
        {
            [marrAllButtons addObject:view];
        }
        else
        {
            viewEnumerator(view);
        }
    }
};

viewEnumerator(self.view);

NSLog(@"All Buttons %@", marrAllButtons);

只需幾行代碼

-(void)findAllButtons {
    [self findButtonsInSubviews:self.view.subviews];
}

- (void)findButtonsInSubviews:(NSArray *)subviews {
    for(UIView *view in subviews) {
        if ([view isKindOfClass:[UIButton class]]){
            NSLog(@"found a button!");
        } else {
            [self findButtonsInSubviews:view.subviews];
        }
    }
}
- (NSMutableArray *)buttonsInView:(UIView *)view
{
    NSArray *subviews = view.subviews;
    NSMutableArray *buttons = [NSMutableArray array];

    for (UIView *subview in subviews)
    {
        if ([subview isKindOfClass:[UILabel class]])
        {
            [buttons addObject:subview];
        }
        else if(subview.subviews)
        {
            [buttons addObjectsFromArray:[self buttonsInView:subview]];
        }
    }
    return buttons;
}

如果您的所有按鈕都已經在self.view(主視圖)中,則您的方法是正確的。

只需為所有按鈕 設置標簽以進行檢查,並確保所有按鈕都位於主視圖上 我希望這會起作用。

-(void)findAllButtons{

for(UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[myButton class]]){
       UIButton *button = (UIButton*)view;
        NSLog(@"found a button with tag:%d",button.tag);         
    }
  }
}
for(UIView * subView in view.subviews) // here write Name of you ScrollView.

 {

     // NSLog(@"test %@", [subView class]);

                    if([subView isKindOfClass:[UIButton class]])

                    {

                        UIButton *button = (UIButton*)subView;

                        [button setSelected:NO] ;


NSString *s1;

s1 = @",";

s1 = [s1 stringByAppendingString:[NSString stringWithFormat:@"%@",button.titleLabel.text ]];


s1 = [s1 stringByAppendingString:[NSString stringWithFormat:@"%@",@"," ]];


                   NSRange range = [temp_Colors_Name_comma rangeOfString:s1  ];

                        if(range.location == NSNotFound)

                        {



                        }

                        else

                        {

                            [button setSelected:YES];


                        }

                    }

                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM