Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何让两个按钮更改标题并执行两个不同的功能?_Ios_Objective C_Button - Fatal编程技术网

Ios 如何让两个按钮更改标题并执行两个不同的功能?

Ios 如何让两个按钮更改标题并执行两个不同的功能?,ios,objective-c,button,Ios,Objective C,Button,我用Objective-C做秒表。我已经有了一个带有3个按钮的基本秒表:开始、停止和重置。以下是我的viewcontroller.m代码: #import "ViewController.h" @interface ViewController () @end @implementation ViewController -(IBAction)Start:(id)start { Timer = [NSTimer scheduledTimerWithTimeInterval:0.0

我用Objective-C做秒表。我已经有了一个带有3个按钮的基本秒表:开始、停止和重置。以下是我的viewcontroller.m代码:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(IBAction)Start:(id)start
{
    Timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self          selector:@selector(addingthetime) userInfo:nil repeats:YES];
}

-(IBAction)Stop:(id)sender
{
    [Timer invalidate];
}

-(IBAction)Restart:(id)sender
{
    [Timer invalidate];
    addingtheTime = 0;
    Label.text = [NSString stringWithFormat:@"0.00"];
}

-(void)addingthetime
{
    addingtheTime = addingtheTime + 0.01;
    Label.text = [NSString stringWithFormat:@"%.2f", addingtheTime];
}

@end
#import "ViewController.h"

@interface ViewController ()


@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a     nib.
}

-(void)addingthetime
{
    addingtheTime = addingtheTime + 0.01;
    Label.text = [NSString stringWithFormat:@"%.2f", addingtheTime];
}

- (IBAction)startOrStopAction:(UIButton *)sender {

    // stop
    if ([sender.titleLabel.text isEqualToString:@"stop"]) {

        [Timer setFireDate:[NSDate distantFuture]];

        [sender setTitle:@"start" forState:UIControlStateNormal];
    }
    // start
    else {

        if (!Timer) {
            Timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(addingthetime) userInfo:nil repeats:YES];
        }else {
            [Timer setFireDate:[NSDate date]];
        }

        [sender setTitle:@"stop" forState:UIControlStateNormal];
    }

}


@end
这是我的viewcontroller代码。h:

#import <UIKit/UIKit.h>

float addingtheTime;

@interface ViewController : UIViewController
{
    IBOutlet UILabel *Label;
    NSTimer *Timer;
}

@end
#import <UIKit/UIKit.h>

float addingtheTime;

@interface ViewController : UIViewController
{
    IBOutlet UILabel *Label;

    NSTimer *Timer;

}

@end
#导入
浮动时间;
@界面ViewController:UIViewController
{
IBUILABEL*标签;
n定时器*定时器;
}
@结束
因此,我的问题是,单击“开始”按钮后,如何使其执行以下操作:

  • 启动计时器
  • 将标题更改为“停止” (再次单击同一按钮)
  • 停止计时
  • 将标题更改为“开始”
  • 因此,目标是只有一个按钮,启动和停止计时器,但请我希望标题也改变

    不要担心重置按钮,因为我希望它自己保持不变


    请解释清楚,因为我发现有些东西很难理解,而且我是一个初学者,所以请尽量保持简单。谢谢,如果问题不清楚,请道歉

    您可以使用
    按钮.tag
    属性来实现这一点。默认情况下,
    按钮.tag
    属性具有
    0
    。因此,假设0是计时器未启动时的状态,1是计时器启动时的状态。您可以根据自定义逻辑操作.tag属性

    -(IBAction)Start:(id)start
    {
        UIButton *button = (UIButton *)start;
        if (button.tag == 0){
            button.tag = 1;
            [button setTitle:@"Stop" forControlState:UIControlStateNormal];
            Timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self          selector:@selector(addingthetime) userInfo:nil repeats:YES];
        }else {
             button.tag = 0;
            [button setTitle:@"Stop" forControlState:UIControlStateNormal];
            //Invoke your method to stop Timer.
        }
    }
    

    在ViewController.h中:

    #import <UIKit/UIKit.h>
    
    float addingtheTime;
    
    @interface ViewController : UIViewController
    {
        IBOutlet UILabel *Label;
        NSTimer *Timer;
    }
    
    @end
    
    #import <UIKit/UIKit.h>
    
    float addingtheTime;
    
    @interface ViewController : UIViewController
    {
        IBOutlet UILabel *Label;
    
        NSTimer *Timer;
    
    }
    
    @end
    
    结果是:

    在iPhone中:

    在iPad中:


    虽然这确实解决了问题,但我倾向于避免使用标记属性b/c许多开发人员仍然使用viewWithTag方法来定位视图。我可能只是在视图控制器中有一个BOOL标志,或者可能是一个“状态”枚举,以防您需要涵盖其他情况。嘿,我尝试了这个方法,但它给了我以下错误消息:“UIButton没有可见的@interface声明选择器setTitle:forControlState:这可能很容易修复,但我只是一个初学者。我从两条线上收到这条消息。一行是:[按钮设置标题:@“停止”控制状态:UIControlStateNormal];-提前谢谢你的帮助。(我知道我很笨;)-另一行是[button setTitle:@“Start”for ControlState:UIControlStateNormal];嘿,不幸的是,当我运行这个程序时,我的iPad崩溃了;(对不起,谢谢。不知道是什么原因造成的!!!@MattPidd它在iphone上崩溃了吗?