如何在viewDidAppear时调用pickerview的委托?

时间:2013-04-30 05:14:06

标签: ios objective-c cocoa-touch delegates uipickerview

我需要在我的选择器视图中最后选择的行在视图出现时完全被调用!我在我的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"]);

}

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

在viewDidAppear中添加此代码,

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

selectedRowInComponent将为您提供所选的行号,然后您可以使用selectRow:Row_number inComponent:Component_number animated:YES来选择任何行,picker委托方法将不会被调用。

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

  int index = [pickerViewObject selectedRowInComponent:0];

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