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