以编程方式更改UIButton的状态

时间:2013-03-06 14:40:58

标签: objective-c ios6 uibutton

我有一个弹出视图,当用户点击带有Core Data元素的TableView时会加载该视图。在弹出视图中,我有一个表示int值的标签。

弹出视图有两个按钮,一个用于将标签的值减1,另一个用于将标尺的值增加1。所以+和 -

如果标签的值为0,我想要禁用减号按钮。我试过的是:

-(void)viewDidLayoutSubviews{
     NSString *daString = currentVal.text;
        NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
        [f setNumberStyle:NSNumberFormatterDecimalStyle];
        NSNumber * myNumber = [f numberFromString:daString];
        int number = [myNumber intValue];
        if (number==0)
            minus.enabled = NO;
        else
            minus.enabled = YES
}

我的代码的问题是在我增加标签的值后按钮保持禁用状态,并且它不再等于0。 有什么建议吗?

4 个答案:

答案 0 :(得分:1)

看起来你有相反的东西。我会采取完全不同的方法:

在这个包含数字的viewController中保留一个实例变量(我们称之为'count')。它可以是一个NSInteger。现在使用@selector(buttonPressed :)向两个按钮添加目标(self)。现在这就是这个选择器应该是这样的:

- (void)buttonPressed:(id)sender{
    if (sender==plusButton)
        self.count++;
    if (sender==minusButton)
        self.count--;
    label.text = [NSString stringWithFormat:@"%d",self.count];
    minusButton.enabled = (self.count>0);
}

答案 1 :(得分:1)

你应该保留对减号按钮的引用,例如

@property (strong, nonatomic) IBOutlet UIButton *minusButton;

使用减号按钮的值设置它,或在Interface Builder

中连接插座

在plusButton的动作处理程序中,执行类似的操作

-(IBAction)plusAction:(id)sender {
     //Do your business logic
     ...
     self.minusButton.enabled = YES;
}
//In your minusButton action handler
-(IBAction)minusAction:(id)sender {
     //Do your business logic
     ...
     NSString *daString = currentVal.text;
     NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
     [f setNumberStyle:NSNumberFormatterDecimalStyle];
     NSNumber * myNumber = [f numberFromString:daString];
     int number = [myNumber intValue];
     if (number==0)
        self.minusButton.enabled = NO;
     else
        self.minusButton.enabled = YES
}

答案 2 :(得分:0)

我只想使用UIStepper,而不是2个按钮。您可以在storyboard / IB文件中设置属性,指定max和min,增量以及一堆其他有用的东西。在YouTube上发布了一些视频教程,可能涵盖了使用它时需要了解的所有内容。

答案 3 :(得分:0)

另外,我注意到有一件事...... 如果按钮处于禁用状态并且您正在尝试更改正常状态的标题,则它将无法工作。 我必须将状态更改为启用,然后我可以操纵标题并重新设置为禁用。