2010-01-25 3 views
1

저는 응용 프로그램을 사용하는 핵심 데이터에서 작업 중이며 EditingViewController는 객체의 속성을 설명하는 많은 ui 요소의 컨트롤러 역할을합니다. EditingViewController 내에서 모든 uu 요소는 호출되고 .hidden = YES/NO; 조작으로 숨겨집니다. 내 UI 요소 중 하나가 uipickerview입니다. 현재 두 개의 서로 다른보기마다 하나의 배열이 있습니다. 즉, firstname 필드를 클릭하면 array1이 picker1에서로드되고 선택자가 선택하고 lastname을 클릭하면 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은 너무 커서 배열 1의 정보를 조금 더 잘 정렬 할 수 있도록 picker1에 UISegmentedControl을 추가하고 싶습니다. 나는 UISegmentedControl이 버튼 집합이며 UAegmentedControl에 의해 관리되는 IBActions를 어떻게 연결해야 하는지를 알 수 있습니다. 그러나 어떻게 구현할 수 있습니까? 내 뷰 중 맨 처음 picker1과 array1이 UISegmentedControl에 의해 관리됩니까? 그냥 순조로운 정렬 프로세스가되도록 만들 수 있습니까? 나는 내가 UISegmentedControl에서 설정 한 조건에 따라 array1을 다른 배열로 분해 할 것이라고 생각한다. 어떻게 연결하여 좋은 모양으로 만들 수 있는가? 항상이 주제에 대한 도움을 주시면 대단히 감사하겠습니다! 감사합니다

답변

2

selectedSegmentIndex 속성을 사용하십시오.

- (IBAction)handleValueChanged 
{ 
    [self.picker reloadAllComponents]; 
} 
: 또한

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]; 
    } 
} 

, 당신은 세그먼트 제어 변경, 그래서이 같은 방법으로 분할 컨트롤의 값이 변경된 이벤트를 연결해야 할 때 선택기를 다시로드하기를 원할 것입니다 : 예를 들어

+1

완벽하게 작동합니다! 정말 고맙습니다 – Steve

관련 문제