我在iPhone屏幕上有兩個控件 - 一個TableView和一個UIPickerView。當您在TableView中選擇單個單元格時,您會看到另一個顯示服裝類型列表的屏幕。從列表中選擇一件衣服項目會將您帶回第一個屏幕。根據您的選擇,UIPickerView中組件的數量會發生變化(1-4),並且每個組件都會填充相關數據。爲什麼在每次顯示視圖時都不調用UIPickerView widthForComponent委託方法?
比方說,你有你的服裝類型列表中的三個項目和每個項目都要有一定數量的UIPickerView組件當選擇它:
腰帶 - 3個組件與55的100寬度,100 胸罩 - 3個組分具有55寬度,55,55 其他 - 4個部件55的100的寬度,100,,50
場景#1 - 一切是因爲它應該是
1.1 - 您選擇「腰帶」服裝項目和UIPickerView是用3個組件繪製的每個組件中的適當皮帶數據。零件寬度爲100,55,100。
1.2 - 您選擇「其他」服裝項目,UIPickerView使用4個組件繪製,並在每個組件中使用適當的其他數據繪製。組件的寬度爲100,100,55,50。
1.3 - 您選擇「Brassiere」服裝項目,UIPickerView使用3個組件繪製,並在每個組件中使用相應的Brassiere數據。該組件寬度是55,55,55
方案2 - 不重繪
1.1組件寬度 - 您選擇「帶」的衣服物品和UIPickerView畫有3個組件與相應的帶數據每個組件。零件寬度爲100,55,100。
1.2 - 選擇「Brassiere」服裝項目,UIPickerView用3個組件繪製,並在每個組件中使用適當的Brassiere數據。但是,組件寬度仍爲100,55,100,而不是55,55,55。
1.3 - 您選擇「其他」服裝項目,UIPickerView使用4個組件繪製,每個組件中包含適當的其他數據。零件寬度爲100,100,55,50。
1.2 - 選擇「Brassiere」服裝項目,UIPickerView使用3個組件繪製,並在每個組件中使用相應的Brassiere數據繪製。組件寬度現在正確 - 55,55,55。
從單步執行代碼看起來像UIPickerView widthForComponent委託方法僅在UIPickerView中的組件數發生更改時調用。
有沒有什麼辦法強制這個委託方法每次觸發?
更新 - 09年10月26日
我打電話[UIPickerView reloadAllComponents使用下面的代碼viewWillAppear中代表:
-(void)viewWillAppear:(BOOL)animated {
...
self.PopulatePickerArrays; // Populate components based on selection
[sizePicker reloadAllComponents];
...
}
在此先感謝。
我已經這樣做了(請參閱上面的代碼示例)。只有當UIPickerView中的組件數量發生更改時,纔會調用widthForComponent委託方法。 – billmaya 2009-10-26 10:56:52
嗯。我剛試圖按下一個按鈕來實現不斷變化的組件數量,它工作正常... onBtnPlusComponent的代碼是在我的文章。 – Morion 2009-10-26 11:51:34