Ios 通过单击其他按钮启用禁用的按钮

Ios 通过单击其他按钮启用禁用的按钮,ios,iphone,objective-c,uibutton,Ios,Iphone,Objective C,Uibutton,我的应用程序需要通过设置开始和停止时间来记录时间间隔 我希望一开始只启用“开始”按钮,而禁用“停止”按钮 单击start按钮时,我希望禁用start按钮(下面的代码可以完成这一操作),但我希望单击此按钮也可以启用stop按钮。单击stop按钮将禁用stop按钮(同样,下面的代码也会处理这一部分) 我还想创建一个重置按钮,将启动和停止按钮返回到其初始状态-即启动按钮启用和停止按钮禁用,但我非常确定,如果我得到初始查询的答案,我可以自己解决这个问题。如果有必要的话,我使用的是Xcode 5 提前谢谢

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

我希望一开始只启用“开始”按钮,而禁用“停止”按钮

单击start按钮时,我希望禁用start按钮(下面的代码可以完成这一操作),但我希望单击此按钮也可以启用stop按钮。单击stop按钮将禁用stop按钮(同样,下面的代码也会处理这一部分)

我还想创建一个重置按钮,将启动和停止按钮返回到其初始状态-即启动按钮启用和停止按钮禁用,但我非常确定,如果我得到初始查询的答案,我可以自己解决这个问题。如果有必要的话,我使用的是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;
    }

创建从类到“开始”和“停止”按钮的出口,并使用这些按钮设置它们的状态,而不是希望
sender
是一个按钮。

您需要为“停止”按钮和“开始”按钮添加一个IBOutlet:

@property (strong, nonatomic) IBOutlet UIButton start;
@property (strong, nonatomic) IBOutlet UIButton stop;
然后,在Interface builder中,将每个按钮连接到相应的插座

在您的实现中

然后,在StartButton方法中,可以添加

stop.enabled = YES;
和停止按钮类似

start.enabled = YES;

创建后按钮用于启用和禁用布尔值

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//通过添加子视图创建按钮

启用:

button.enable=YES; or button.enable=TRUE;
禁用:

button.enable=NO or button.enable=FALSE;

如果您按照上一个答案()中的建议为
start
stop
按钮添加插座,您的解决方案可能如下所示:

- (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;
}

使用完全相同的格式化程序两次,也许您应该考虑将代码片段重构为某种方法。无论如何,最好为格式化程序设置一个实例变量,不要每次用户单击

start
stop
按钮时都创建它,因为
NSDateFormatter
是一个有点重的组件(记住在用户单击
start
stop
按钮之前初始化此日期格式化程序)

要使用重置按钮设置初始状态,您必须添加另一个按钮,就像对
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
}

给出Xib或故事板中每个UIButton的标签,所有按钮动作都转换为普通按钮动作,并使用开关盒,尝试此操作此操作可处理重置按钮。谢谢它正在修复单击每个按钮后出现的问题(您没有启用第二个按钮);)正如您在另一个答案中提到的,可以在
viewDidLoad
中调用
setInitialState
。您还可以在那里初始化
NSDateFormatter
的一些实例,并使用它代替
createDateFormatter
方法@user2872997我认为您的问题已经有了答案,因此您可能应该标记出最好的答案,因为在寻找解决方案时,其他人会更容易找到答案;)@这是你问题的答案吗?如果是这样,请标记它,使其更清楚地为未来的答案寻求者,谢谢一个交易。谢谢你的帮助!完美的我仍在试图找出如何设置它,使停止按钮开始禁用,但我通过这里的其他答案之一找到了答案,在viewDidLoad中设置初始状态。我会发布代码,但我在手机上。当我的手机上只有可用的互联网时,没有什么比编写应用程序更好的了:/谢谢!
- (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
}
- (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
}