Ios 如何让两个按钮更改标题并执行两个不同的功能?
我用Objective-C做秒表。我已经有了一个带有3个按钮的基本秒表:开始、停止和重置。以下是我的viewcontroller.m代码: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
#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上崩溃了吗?