2013-04-30 14 views
1

我需要在pickerview中最後一個選定的行在視圖出現時被完全調用!我在我的viewDidAppear中有這個代碼,它動畫到最後選擇的行,但它並沒有真正地調用我的行中的delegateNSLog不會觸摸我的選擇器並重新選擇它們。viewDidAppear時,如何調用pickerview的代表?

我該怎麼做?

- (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

不要用'xcode'標記與Xcode無關的問題。 – 2013-04-30 05:15:00

+0

謝謝我用'uipickerview'標記它而不是 – user1949873 2013-04-30 05:22:04

+0

@userXXX我明白了,謝謝! – 2013-04-30 05:22:20

回答

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的指標值。

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 
} 
+0

謝謝,但我看到你選擇了'行'「4」!我已經專門使用'NSUserDefault'來調用用戶最後一次選擇的行!我可以這樣做嗎? – user1949873 2013-04-30 05:31:37

+0

我只是在輸入我的答案時很懶惰。你使用'NSUserDefaults'很好。儘管在閱讀時沒有理由調用「同步」。 – rmaddy 2013-04-30 05:56:14

+0

我真的用'NSUserDefault'嘗試了它,但輸出返回時調用第一行,而它是第三行選擇!什麼問題? – user1949873 2013-04-30 06:04:33

相關問題