2009-05-01 60 views
69

我有一個iphone數據庫應用程序,它可以從表格中加載數據UIPickerView。我想從另一個表中的數據中將選定的行設置爲特定的行。例如:假設我有一個UIPickerView,它裝載了X個iPhone用戶朋友的名字(名字數量是可變的,可能是1或1000,並且所有數據都由用戶輸入到數據庫中) 。 iPhone用戶有一個偏好設置,他們目前最好的朋友是TED。我想要UIPickerView在顯示時定位到TED。選擇行加載UIPickerView之後

我在哪裏可以撥打selectRow

我試過viewDidAppear但它從來沒有叫過,在titleForRow裏面造成了各種奇怪的行爲。 viewDidLoadviewWillAppear是不可能的,因爲我不知道數據源中的選擇器到底是什麼。

在此先感謝。

+0

只要把@jab代碼在他的回答中加載數據,並給予委託後。多數民衆贊成在我身上! – 2017-01-10 07:24:57

回答

134

檢索數據後調用它。我不知道你在哪裏加載數據,所以這只是一個應該工作的模型。如果這沒有任何意義,讓我知道你在哪裏加載數據,所以我可以一起在我的腦海:)

-(void)viewDidLoad 
{ 
    // load data from sql 
    // self.someDataArray = DATAFROMSQL 
    [picker reloadAllComponents]; 
    [picker selectRow:0 inComponent:0 animated:YES]; 
} 
+0

謝謝,我正在像您的樣機一樣在viewDidLoad中檢索數據。我不得不創建一個枚舉整個列表的方法來查找匹配索引,然後設置選擇器。我想也許我錯過了一個回調,可以在選擇器加載之後並返回到事件循環之前使用。 – 2009-05-02 14:19:02

7

這個地方無論你初始化包含您UIPickerView作爲一個子視圖的UIView拼湊它:

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO]; 
39

當最初顯示UIPickerView時需要選擇(默認)UIPickerView項目時存在一個常見問題。問題與事件的順序有關。從閱讀以前的帖子看來,[pickerView selectRow:n]通常在視圖控制器的ViewDidLoad事件中調用。但是,UiPickerView數據僅在ViewDidLoad事件之後加載,這意味着ViewDidLoad中的任何選擇代碼都不起作用。爲了補救,將選擇代碼放在ViewDidAppear中;

- (void) viewDidAppear:(BOOL)animated { 
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; } 
4

我剛剛發現在4.3 SDK上,iPhone和iPad之間的組件加載行爲是不同的。在iPhone上,我正要在添加到子視圖層次結構之前或之後初始化視圖後調用selectRow:right。但在iPad上,selectRow調用沒有結果。我使用performSelector結束:withObject:afterDelay:調用在發射之前等待0.1秒selectRow:inComponent:animated :.這在iPhone和iPad上有可預測的結果。

0

如果你想選定的行永久強調使用此

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor; 
1

對於迅速它只是

self.picker?.selectRow(0, inComponent: 0, animated: true)