【发布时间】:2015-10-20 09:18:30
【问题描述】:
我有一个 UIPickerView,在一个视图控制器中有一个数组,在另一个视图控制器中有一个 NSTimer,我正在尝试:
1) 将选取器数组链接到 NSTimer,以便用户在选取器上选择一个时间以使图像自毁
2) 在 UILabel 中显示剩余时间,因此用户选择的秒数下降到 0。(例如,从选择器标签中选择 2 显示 2 然后 1 然后 0 和图像破坏) em>
one vc.h
@property (strong, nonatomic) IBOutlet UIPickerView *timePicker;
@property (nonatomic, strong) NSArray *pickerData;
one vc.m
- (void)viewDidLoad {
[super viewDidLoad];
self.pickerData = @[@1,@2,@3,@4,@5,@6,@7];
self.timePicker.dataSource = self;
self.timePicker.delegate = self;
}
- (void) viewWillAppear:(BOOL)animated {
[self.textField setText:self.userText];
}
-(long)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
-(long)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.pickerData.count;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
[self.pickerData objectAtIndex:[self.timePicker selectedRowInComponent:0]];
}
two vc.h
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (nonatomic, assign) int seconds;
two vc.m
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[NSTimer scheduledTimerWithTimeInterval:7 target:self selector:@selector(timeout)
userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:self.seconds target:self selector:@selector(setTimeToLabel) userInfo:nil repeats:NO];
}
-(void)timeout
{
// pops to root view
}
- (void)setTimeToLabel
{
self.seconds = self.seconds - 1;
self.timeLabel.text = [NSString stringWithFormat:@"%d", self.seconds];
}
NSTimer 不响应 self.seconds 并且不从 UIPicker 获取用户输入。
关于如何将选择器链接到计时器以便计时器响应用户在选择器中选择的秒数并在标签中显示剩余秒数的任何想法??
我的prepareforsegue方法如下:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.destinationViewController isKindOfClass:[oneViewController class]]) {
oneViewController * ovc = (oneViewController*)segue.destinationViewController;
ovc.array = //whatever;
}
if ([segue.destinationViewController isEqual:@"secondVC"]) {
NSInteger row = [self.timePicker selectedRowInComponent:0];
twoViewController *tvc = [segue destinationViewController];
tvc.seconds = [[self.pickerData objectAtIndex:row] intValue];
}
}
这可能是什么问题,onviewcontroller 方法有效,无论我传递什么它都有效,但是对于 tvc.seconds 没有任何东西传递给它。
【问题讨论】:
-
如果你在两个 viewDidAppear 中 NSLog self.seconds 你会得到什么?
-
在控制台显示0
-
如何将用户输入值从一个控制器传递到另一个控制器?
-
你是什么意思?我尝试传递调用 twoViewController 的值,然后分配和初始化它。
-
所以我在ibaction next中使用这个方法按钮
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil]; viewControllerB.isSomethingEnabled = YES; [self pushViewController:viewControllerB animated:YES];
标签: ios objective-c nsarray uipickerview nstimer