2011-08-31 126 views
0

我在Xcode 4.02中使用了Interface Builder在View中添加了兩個UIPickerViews。它們連接到相同的委託和數據源(UIViewController)。在我的.h文件中,我還聲明瞭UIPickerViews並將它們作爲參考插座連接,如許多示例中所示。 在viewForRow我使用UILabels相同的NSMutable數組數組返回適當的值(這個數組填充在viewDidLoad中)。兩個UIPickerView對象可以共享相同的數據源數組嗎?

但是,我發現沒有標籤同時出現在兩個UIPickerViews中。例如,當應用程序啓動時,每個UIPickerView應顯示元素0,1和2.每個UIPickerView對viewForRow調用3次,但只有調用viewForRow的視圖纔會顯示前3行。另一個UIPickerView是空白的。如果我將第一個視圖向下滾動到第六個元素,然後回到第一個視圖,視圖將顯示前3個元素,但第二個視圖(顯示前3行的那個)現在不顯示任何內容。具體來說,兩個UIPickerView中不會同時出現數據數組元素。

這是預期嗎?每個UIPickerView應該有自己的支持數組 - 如果你使用它們?並非所有這些返回的視圖只是指針?就好像每個數組元素只能在任何時候最多顯示(指向)一次。

如果我使用兩個單獨的數據數組,那麼似乎沒有問題。但它確實意味着額外的內存和額外的編碼。

注:viewForRow我有一些代碼來設置標籤的尺寸:

UILabel *xx = (UILabel *)[self.array1 objectAtIndex:row];   
    CGSize rowSize = [thePickerView rowSizeForComponent:component]; 
    CGRect labelRect = CGRectMake (0, 0, rowSize.width, rowSize.height); 
    [xx setFrame:labelRect]; 

此處設定的值時,該行後顯示爲空白甚至不發生變化。

回答

0

多個選擇器視圖可以共享相同的數據源,但視圖(在這種情況下爲UILabel)只能有一個超級視圖。

你不能在兩個選擇器中使用相同的標籤,並且可能沒有什麼理由將它們存儲在你自己的數組中。更好的方法是在viewForRow方法中創建一個單獨的標籤,並且只有一個包含標籤內容的陣列(例如NSString)。

在您當前的實現中,當您返回標籤時,選擇器會將其添加到其自己的視圖層次結構中,該視圖層次會從其之前的任何視圖(您的其他選取器)中隱式移除它。

+0

謝謝。這就說得通了。 – George

相關問題