首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIPickerView停止NSTimer

UIPickerView停止NSTimer
EN

Stack Overflow用户
提问于 2013-02-14 09:42:01
回答 1查看 357关注 0票数 0

我一直在开发一个小应用程序,它只包含两个元素,一个UILabel和一个UIPickerView

UILabel由一个NSTimer更新,从60下降到0。

UIPickerView只包含一个数据数组,不要直接与UILabelNSTimer进行交互。

我的问题是,当我玩UIPickerView,我滚动向上或向下,计数器“动画”停止,继续它的行动,直到你选择一个选项从UIPickerView。

我无法修复这个问题,我不知道它是否是iPhone SDK中的一个bug,或者是否有任何becomeFirstResponder属性可以帮助我。

我正在使用iOS SDK6.1。

这是我的密码:

ViewController.h

代码语言:javascript
复制
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>{
    IBOutlet UIPickerView *uno;
    NSMutableArray *numeros;
    NSTimer *timer;
    IBOutlet UILabel *contador;
    int num;
}

@property (nonatomic, retain) IBOutlet UIPickerView *uno;

@property (nonatomic, retain) NSMutableArray *numeros;

@property (nonatomic, retain) IBOutlet UILabel *contador;

@end

ViewController.m

代码语言:javascript
复制
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize uno, numeros, contador;

- (void)viewDidLoad
{
    [super viewDidLoad];

    numeros = [[NSMutableArray alloc] init];
    [numeros addObject:@"0"];
    [numeros addObject:@"1"];
    [numeros addObject:@"2"];
    [numeros addObject:@"3"];
    [numeros addObject:@"4"];
    [numeros addObject:@"5"];
    [numeros addObject:@"6"];
    [numeros addObject:@"7"];
    [numeros addObject:@"8"];
    [numeros addObject:@"9"];

    uno.delegate = self;
    uno.dataSource = self;

    num = 60;

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
    return [numeros count];
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [numeros objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSLog(@"Hi");
}

- (void)updateCounter:(NSTimer *)theTimer {
    num = num - 1;
    [contador setText:[NSString stringWithFormat:@"%d",num]];
}

@end

这个应用程序看起来如下:http://imgur.com/ljB93tN

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 09:53:26

NSRunLoop后面添加

代码语言:javascript
复制
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];


NSRunLoop *runner = [NSRunLoop currentRunLoop];
        [runner addTimer:timer forMode: NSDefaultRunLoopMode];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14871810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档