【问题标题】:How do I call the delegate of the pickerview when viewDidAppear?viewDidAppear时如何调用pickerview的委托?
【发布时间】:2013-04-30 05:14:05
【问题描述】:

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

}

【问题讨论】:

  • 不要用xcode标记与Xcode无关的问题。
  • 谢谢我用uipickerview 标记了它
  • @userXXX 我明白了,谢谢!

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


【解决方案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
}

【讨论】:

  • 谢谢,但我看到你选择了row“4”!我专门使用NSUserDefault 来回忆用户最后选择的行!我可以这样做吗?
  • 我只是在输入答案时很懒惰。你使用NSUserDefaults 很好。虽然你没有理由在阅读时打电话给synchronize
  • 我确实使用NSUserDefault 进行了尝试,但输出返回调用第一行,而它是选择的第三行!出了什么问题?
  • 这是一个完全独立的问题。为了帮助调试该问题,请将来自 NSUserDefaults 的结果存储在单独的变量中,以便您查看实际得到的结果。
  • 我该怎么做?你有类似问题的链接吗?或者你更喜欢我把它作为一个新问题来问?
【解决方案2】:

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

在 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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2018-11-11
    • 2011-01-19
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多