aar*_*ont 3 cocoa objective-c increment
我是Objective-C的新手,所以可能有一个简单的解决方案.
我想要一个数字递增,但每次迭代都要在标签上显示.(例如,它显示1,2,3,4,5 ......分开显示一段时间).
我试过了:
#import "testNums.h"
@implementation testNums
- (IBAction)start:(id)sender {
int i;
for(i = 0; i < 10; ++i)
{
[outputNum setIntValue:i];
sleep(1);
}
}
@end
Run Code Online (Sandbox Code Playgroud)
它所做的就是等待9秒钟(显然是冻结的),然后在文本框中显示9.
要允许运行循环在消息之间运行,请使用NSTimer或延迟执行.这是后者:
- (IBAction) start:(id)sender {
[self performSelector:@selector(updateTextFieldWithNumber:) withObject:[NSNumber numberWithInt:0] afterDelay:1.0];
}
- (void) updateTextFieldWithNumber:(NSNumber *)num {
int i = [num intValue];
[outputField setIntValue:i];
if (i < 10)
[self performSelector:@selector(updateTextFieldWithNumber:) withObject:[NSNumber numberWithInt:++i] afterDelay:1.0];
}
Run Code Online (Sandbox Code Playgroud)
这是一个基于计时器的解决方案.您可能会发现更容易理解.您可以从文本字段设置文本字段的值:
@interface TestNums: NSObject
{
IBOutlet NSTextField *outputField;
NSTimer *timer;
int currentNumber;
}
@end
@implementation TestNums
- (IBAction) start:(id)sender {
timer = [[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateTextField:)
userInfo:nil
repeats:YES] retain];
//Set the field's value immediately to 0
currentNumber = 0;
[outputField setIntValue:currentNumber];
}
- (void) updateTextField:(NSTimer *)timer {
[outputField setIntValue:++currentNumber];
}
@end
Run Code Online (Sandbox Code Playgroud)
这是一个使用属性的更好(更清洁)的基于计时器的解决方案.您需要将文本字段绑定到Interface Builder中的属性(选择字段,按⌘4,选择对象,然后输入currentNumber作为要绑定的键).
@interface TestNums: NSObject
{
//NOTE: No outlet this time.
NSTimer *timer;
int currentNumber;
}
@property int currentNumber;
@end
@implementation TestNums
@synthesize currentNumber;
- (IBAction) start:(id)sender {
timer = [[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateTextField:)
userInfo:nil
repeats:YES] retain];
//Set the field's value immediately to 0
self.currentNumber = 0;
}
- (void) updateTextField:(NSTimer *)timer {
self.currentNumber = ++currentNumber;
}
@end
Run Code Online (Sandbox Code Playgroud)
基于属性的解决方案至少有两个优点:
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |