ios - 通过单击不同的按钮启用禁用的按钮

标签 ios iphone objective-c uibutton

我的应用需要通过设置开始和停止时间来记录时间间隔。

我只想首先启用开始按钮,禁用停止按钮。

在单击开始按钮时,我希望禁用开始按钮(以下代码可以很好地完成此操作),但我希望通过单击也可以启用停止按钮。单击停止按钮将使停止按钮禁用(同样,以下代码也处理这部分)。

我还想创建一个重置按钮,将开始和停止按钮返回到它们的初始状态 - 即启用开始按钮和禁用停止按钮,但我很确定我可以在我的拥有如果我得到我最初查询的答案。如果重要的话,我正在使用 Xcode 5。

提前致谢!

    - (IBAction)startButton:(UIButton *)sender
    {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"hh:mm:ss.SS"];
        _startTimeLabel.text = [formatter stringFromDate:[NSDate date]];
        UIButton *startButton = (UIButton *)sender;
        startButton.enabled = NO;
    }

   - (IBAction)stopButton:(UIButton *)sender
   {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"hh:mm:ss.SS"];
        _stopTimeLabel.text = [formatter stringFromDate:[NSDate date]];
        UIButton *stopButton = (UIButton *)sender;
        stopButton.enabled = NO;
    }

最佳答案

如果您按照上一个答案 ( https://stackoverflow.com/a/20869697/3151066 ) 中的建议为 startstop 按钮添加 socket ,您的解决方案可能如下所示:

- (IBAction)startButton:(UIButton *)sender
{
    _startTimeLabel.text = [[self createDateFormatter] stringFromDate:[NSDate date]];
    self.start.enabled = NO;
    self.end.enabled = YES;
}


- (IBAction)stopButton:(UIButton *)sender
{
    _stopTimeLabel.text = [[self createDateFormatter] stringFromDate:[NSDate date]];
    self.stop.enabled = NO;
    self.start.enabled = YES;
}

您两次使用了完全相同的格式化程序,因此也许您应该考虑将这段代码重构为某种方法。无论如何,最好为该格式化程序设置一个实例变量,而不是在每次用户单击 startstop 按钮时都创建它,因为 NSDateFormatter 是有点重的组件(请记住在用户单击 startstop 按钮之前初始化此日期格式化程序)。

- (NSDateFormatter *) createDateFormatter 
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"hh:mm:ss.SS"];
    return formatter;//I assume you are using ARC so we do not need to take care of releasing memory
}

要让重置按钮设置初始状态,您必须添加另一个按钮,就像您为 start end stop 按钮所做的那样,并添加以下代码:

- (IBAction)resetButton:(UIButton *)sender
{
   [self setInitialState];
}

- (void) setInitialState 
{
    self.start.enabled = YES;
    self.end.enabled = NO;
    //probably here you will also want to reset text for labels _startTimeLabel and _stopTimeLabel
}

关于ios - 通过单击不同的按钮启用禁用的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869536/

相关文章:

ios - 如何进行 NSDecimal 数学运算?

objective-c - 延迟 -(id)init 实例;是否可以?

iphone - UIWebView 加载低质量图像

iphone - 使用 NSDateFormatter 从 NSString 格式化日期

objective-c - 从 C 代码转换为 ObjC

android - Flutter 中的 FirebaseAuthSettings

ios - 当互联网 (2G) 连接非常慢时通知用户 - iOS

iphone - UIpopoverviewcontroller 单击按钮隐藏 popoverview 并从父 View 中打开 imagepicker

ios - 从 webview 播放视频时如何设置横向

ios - 每次 Plist 文件都会被覆盖