禁用不同方法后重新启用UIButton

时间:2013-12-19 17:15:15

标签: uibutton reset ibaction

我希望在禁用后在Xcode中重新启用UIButton。当按下按钮时,我通过调用IBAction来禁用按钮。

- (IBAction)A0:(UIButton *)sender{
UIButton *enableButton = (UIButton *)sender;
enableButton.enabled = NO;
}

- (IBAction)B0:(UIButton *)sender{
UIButton *enableButton = (UIButton *)sender;
enableButton.enabled = NO;
}

// Lots more buttons

-(Void) reset {

//re-enable all buttons

}

我希望能够在调用重置方法时重新启用所有按钮

由于

2 个答案:

答案 0 :(得分:2)

如果需要操作按钮等用户界面对象,请在视图控制器中创建IBOutlet属性,以管理对象并将对象链接到这些属性。完成后,您将能够使用属性来启用这样的按钮:

-(void) reset {
    //re-enable all buttons
    self.buttonA.enabled = YES;
    self.buttonB.enabled = YES;
    //...and so on
}

如果由于某种原因不想使用插座(例如,您有大量按钮,并且通常不需要对每个按钮的引用),您也可以考虑使用标签。每个视图都有一个整数tag属性,您可以将其设置为您喜欢的任何值。可以在.xib / storyboard编辑器中设置标签。设置视图标记后,可以使用-viewWithTag:方法在视图层次结构中轻松找到它。如果您使用标记,则-reset方法将类似于:

-(void) reset {
    //re-enable all buttons
    [[self.view viewWithTag:kTagForButtonA] setEnabled:YES];
    [[self.view viewWithTag:kTagForButtonB] setEnabled:YES];
    //...and so on
}

其中kTagForButtonAkTagForButtonB是与各个按钮上设置的标记匹配的整数常量。如果你有很多带有连续标签的按钮,你显然也可以使用for循环来依次设置每个标签。

此外,看起来您的所有操作都完全相同 - 每个操作都会禁用发送邮件的按钮。如果是这种情况,您可以对所有按钮使用单个操作:

- (IBAction)buttonAction:(UIButton *)sender {
    sender.enabled = NO;
}

答案 1 :(得分:0)

如果你有很多UIButton个对象,并且按名称手动启用每个UIButton对象是不可行的,你可以试试这个:

-(void)reset
{
    for(UIView *currentView in [self.view subviews]) {
        if ([currentView  isKindOfClass:[UIButton class]]) {
            [currentView setEnabled:YES];
        }
    }
}

这会将UIButtonself.view中的所有setEnabled:YES个对象提供给他们(他们是否已经启用