2010-01-25 41 views
1

我使用的應用程序和一個視圖上的核心數據工作的多個陣列之間的切換是EditingViewController,其充當控制器爲多個,其描述對象的屬性的UI元素。在EditingViewController內部,我的所有UI元素都被調用並隱藏着.hidden = YES/NO;操作。我的一個UI元素是uipickerview。目前,兩個不同視圖中的每一個都有一個數組。這意味着如果他們點擊名字字段,array1將在picker1中加載,然後他們會從中選擇,然後如果他們點擊姓氏,array2將在picker2中加載,並且生活很好。這裏是我的代碼,我正在使用這個工作到現在:使用一個UISegmentedControl使用一個UIPickerView

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
{ 
if (picker1 == self.picker) { 
    return [array1 objectAtIndex:row]; 
} else { 
    return [array2 objectAtIndex:row]; 
} 
} 

但是! array1非常大,我想添加一個UISegmentedControl到picker1,這樣它可以更好地對array1的信息進行排序。我知道,UISegmentedControl只是一個漂亮的一套按鈕,要求IBActions被鏈接之類的東西,但我怎麼能實現它,這樣在一個我的意見,第一個,只是picker1和陣列1由UISegmentedControl管理?是否有可能使它只是一個順利的排序過程?我想我會根據我在UISegmentedControl中設置的條件將array1分解成其他數組,我該如何鏈接這些使他們看起來和工作良好?任何對此主題的幫助一如既往非常感謝!由於

回答

2

使用selectedSegmentIndex財產。

例如:

enum { 
    SEGMENT1, 
    SEGMENT2, 
    SEGMENT3 
}; 

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
{ 
    if (picker1 == self.picker) { 
     if (segmentedControl.selectedSegmentIndex == SEGMENT1) { 
      return [array1sub1 objectAtIndex:row]; 
     } else if (segmentedControl.selectedSegmentIndex == SEGMENT2) { 
      return [array1sub2 objectAtIndex:row]; 
     } else if (segmentedControl.selectedSegmentIndex == SEGMENT3) { 
      return [array1sub3 objectAtIndex:row]; 
     } 
    } else { 
     return [array2 objectAtIndex:row]; 
    } 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    if (picker1 == self.picker) { 
     if (segmentedControl.selectedSegmentIndex == SEGMENT1) { 
      return [array1sub1 count]; 
     } else if (segmentedControl.selectedSegmentIndex == SEGMENT2) { 
      return [array1sub2 count]; 
     } else if (segmentedControl.selectedSegmentIndex == SEGMENT3) { 
      return [array1sub3 count]; 
     } 
    } else { 
     return [array2 count]; 
    } 
} 

此外,你將要重新加載選擇器當分段控制的變化,所以你應該用這樣的方式聯繫起來的分段控制的值更改事件:

- (IBAction)handleValueChanged 
{ 
    [self.picker reloadAllComponents]; 
} 
+1

完美的作品!非常感謝 – Steve 2010-01-25 21:23:03