2012-03-04 87 views
2

我試圖用一個不同的NSArray數據更新一個UIPickerView,這個數據基於哪個索引從UISegmentedControl中選擇。目前,當我更改控件時,numberOfRowsInComponent不會更新,而titleForRow只會在滾動選取器時更新。從UISegmentedControl更新UIPickerView

NSArrays在viewDidLoad中填充,我在SegmentedControl的IBAction上使用reloadAllComponents方法。

@synthesize subnetView, classControl; 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 

    //One column 

    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

    //set number of rows 

    if (classControl.selectedSegmentIndex == 0){ 
     NSLog(@"Class A Rows %d", [classAArray count]); 
     return classAArray.count; 
    } 
    else if (classControl.selectedSegmentIndex == 1){ 
     return classBArray.count; 
    } 
    else if (classControl.selectedSegmentIndex == 2){ 
     return classCArray.count; 
    } 
    return 0; 
} 
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

    //set item per row 

    if (classControl.selectedSegmentIndex == 0){ 
     NSLog(@"Class A Rows %d", [classAArray count]); 
     return [classAArray objectAtIndex:row]; 
    } 
    else if (classControl.selectedSegmentIndex == 1){ 
     return [classBArray objectAtIndex:row]; 
    } 
    else if (classControl.selectedSegmentIndex == 2){ 
     return [classCArray objectAtIndex:row]; 
    } 
    return 0; 
} 

-(IBAction)classChange{ 

    [subnetView reloadAllComponents]; 
} 

根據哪個選擇器被選擇爲在界面構建器中「選定」,選取器將被加載正確的數組和行數。在選擇包含較少元素的數組時,根據此代碼,numberOfRowsInComponents不會更新,並且應用程序將在到達較小數組末尾時崩潰。

所以我的兩個問題:元素

  1. 只更新滾動時發生。
  2. 執行reloadAllComponents方法時,行數不會更新。

感謝收聽!

回答

1

我以前見過這個。通常這是由於pickerview出口未連接造成的,因此無效地調用reloadAllComponents。但是,當你滾動連接的數據源和委託方法仍然工作。

這可以通過登錄使用很容易地檢查出口值:

NSLog(@"%@",subnetView); 

如果它記錄(NULL)因爲我希望它會簡單地連接您的IB出口,你就大功告成了。

+0

感謝您的回覆。從進行應用程序,我發現classChange沒有正確執行。我在界面生成器中將TouchUpInside的出口更改爲ValueChanges。一旦這個變化讓所有事情都按預期開始工作。很高興這很簡單! – jcouser 2012-03-04 05:54:32