0

我有一个弹出视图,当用户单击带有 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

4 回答 4

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);
}
于 2013-03-06T14:51:47.220 回答
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
}
于 2013-03-06T15:32:56.440 回答
0

我会用UIStepper来做这件事,而不是 2 个按钮。您可以在故事板/IB 文件中设置属性,指定最大值和最小值、增量以及其他一些有用的东西。YouTube 上发布了一些视频教程,其中可能涵盖了使用它所需了解的所有内容。

于 2013-03-06T15:17:25.337 回答
0

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

于 2014-04-24T09:32:10.883 回答