2009-10-26 3 views
1

아이폰 화면에는 TableView와 UIPickerView라는 두 개의 컨트롤이 있습니다. TableView에서 단일 셀을 선택하면 의류 유형 목록을 보여주는 다른 화면으로 이동합니다. 목록에서 단일 의류 항목을 선택하면 첫 번째 화면으로 돌아갑니다. 선택에 따라 UIPickerView의 구성 요소 수가 변경 (1-4)되고 각 구성 요소에 관련 데이터가 채워집니다.보기가 나타날 때마다 UIPickerView widthForComponent 대리자 메서드가 호출되지 않는 이유는 무엇입니까?

의 당신이 당신 의류 유형 목록에서 세 가지 항목을 가지고이 선택 될 때 각 항목이 UIPickerView 구성 요소의 특정 숫자를해야한다고 가정 해 봅시다 :

벨트 - 3 개 구성 요소 (100)의 폭, 55, 100 을 (100)의 폭, 100, 55 4 개 구성 요소, 50

시나리오 # 1 - - 브래지어는 - (55)의 폭, 55, 55 기타 3 개 요소가

1.1을해야으로 모든이 - 당신은 선택 "Belt"의류 항목과 UIPickerView는 th와 함께 세 가지 구성 요소로 그려집니다. 각 구성 요소의 적절한 벨트 데이터. 구성 요소 너비는 100, 55, 100입니다.

1.2 - "기타"의류 항목을 선택하면 UIPickerView는 4 개의 구성 요소와 각 구성 요소의 적절한 기타 데이터로 그려집니다. 구성 요소 너비는 100, 100, 55, 50입니다.

1.3 - "Brassiere"의류 항목을 선택하면 각 구성 요소에 적절한 Brassiere 데이터가있는 3 가지 구성 요소로 UIPickerView가 그려집니다. 구성 요소 폭은 55, 55, 55

시나리오 # 2입니다 -

1.1

을 다시 그려하지 구성 요소 폭 - 당신은 "벨트"의류 항목을 선택하고 UIPickerView 적절한 벨트 데이터로 3 개 구성 요소와 함께 그려진 각 구성 요소. 구성 요소 너비는 100, 55, 100입니다.

1.2 - "Brassiere"의류 항목을 선택하면 각 구성 요소에 적절한 Brassiere 데이터가있는 3 개의 구성 요소로 UIPickerView가 그려집니다. 그러나 구성 요소의 너비는 여전히 55,55,500이 아닌 100, 55, 100입니다.

1.3 - "기타"의류 항목을 선택하면 각 구성 요소에 적절한 기타 데이터가있는 4 개의 구성 요소로 UIPickerView가 그려집니다 . 구성 요소 너비는 100, 100, 55, 50입니다.

1.2 - "Brassiere"의류 항목을 선택하면 각 구성 요소에 적절한 Brassiere 데이터가있는 3 가지 구성 요소로 UIPickerView가 그려집니다. 구성 요소의 폭은 지금 올 - 그것은 UIPickerView widthForComponent 위임 방법처럼 보이는 코드를 단계별로 55, 55, 55

에만 호출 될 때 UIPickerView 변화의 성분 수.

매번이 위임 메서드를 강제로 실행할 수있는 방법이 있습니까?

업데이트 - 다음 코드를 사용하여 viewWillAppear 위임에 10.26.09

내가 [호출 오전 UIPickerView의 reloadAllComponents : 사전에

-(void)viewWillAppear:(BOOL)animated { 

... 

self.PopulatePickerArrays; // Populate components based on selection 
[sizePicker reloadAllComponents]; 

... 

} 

감사합니다.

답변

7

를 반환합니다. 수정 된 코드는 다음과 같습니다 :이 웹 페이지에

-(void)viewWillAppear:(BOOL)animated { 

.... 

self.PopulatePickerArray; // Populate components based on selection 

sizePicker.delegate = nil; // NEW CODE 
sizePicker.delegate = self; // NEW CODE 

[picker reloadAllComponents]; 

} 

찾을 정보 - Changing-Width-UIPicker-Continually

0

잘 모르겠지만 viewWillAppear 메서드에서 [pickerView reloadAllComponents];으로 전화를 걸 수 있습니다.

if(currentNumbersOfComponents < 4){ 
    currentNumbersOfComponents++; 
    [picker reloadAllComponents]; 
} 

numberOdComponents 방법은 그것은 당신이 선택 도구의 대리자를 재설정하는 경우, 구성 요소의 폭이 선택 될 때마다 다시 그려야하는 것으로 나타났다 currentNumberOfComponents

+1

나는 이미이 작업을 수행하고 있습니다 (위의 코드 예 참조). widthForComponent 대리자 메서드는 UIPickerView의 구성 요소 수가 변경 될 때만 호출됩니다. – billmaya

+0

흠. 난 그냥 버튼을 누르면 구성 요소의 변화 번호를 구현하려하고 잘 작동 ... onBtnPlusComponent의 코드는 내 게시물에 있습니다. – Morion

6

사실, 단지 setNeedsLayout도 작동 사용 및 비트 청소기 수 있습니다.

[picker reloadAllComponents]; 
[picker setNeedsLayout]; 
+0

이것은 답변이어야하며 완벽하게 작동하며 해결 방법이 필요하지 않으며, – danfordham

관련 문제