1

当视图出现时,我需要完全调用我的选择器视图中最后选择的行!我的代码中有这段代码viewDidAppear 动画到最后一个选定的行,但它并没有真正调用,delegate并且NSLog我的行中的 不会在不触摸我的选择器并重新选择它们的情况下打印。

我怎么做?

- (void)viewDidAppear:(BOOL)animated {

 NSUserDefaults *pickerViewSelectionDefaults = [NSUserDefaults standardUserDefaults];
[tasbeehPicker selectRow:[pickerViewSelectionDefaults integerForKey:@"picker"]
      inComponent:0 animated:YES];

[pickerViewSelectionDefaults synchronize];
[UIPicker reloadAllComponents];    

NSLog(@"Last selcted row was %d  ",[[NSUserDefaults standardUserDefaults] integerForKey:@"picker"]);

}
4

2 回答 2

1

当您通过代码更新选择器时,不应调用委托。仅当用户与选取器交互时才会调用委托。如果您需要在两种情况下调用相同的代码,请执行以下操作:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [myPicker selectRow:4 inComponent:0 animated:animated];
    [self handlePickerSelection:myPicker];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    [self handledPickerSelection:pickerView];
}

- (void)handlePickerSelection:(UIPickerView *)pickerView {
    // process selection
}
于 2013-04-30T05:19:14.173 回答
0

您可以从下面的方法中获取选定的行,

在 viewDidAppear 中添加此代码,

  int index = [pickerViewObject selectedRowInComponent:0];
  [pickerViewObject selectRow:index inComponent:0 animated:YES];

selectedRowInComponent 会给你选择的行号,然后你可以使用 selectRow:Row_number inComponent:Component_number animated:YES 选择任何行,选择器委托方法不会被调用。

如果你想在 NSUserDefaults 中保存选定的行,而不是在 viewWillDisappear 中,

  int index = [pickerViewObject selectedRowInComponent:0];

现在将此索引值保存在 NSUserDefaults 中。

于 2013-04-30T05:46:13.490 回答