2011-01-30 2 views
7

나는 선택기와 UIToolbar가 포함 된 UIActionSheet가 있습니다. UIToolBar에는 저장 버튼이 있습니다. 그러나 일부 사용자는 UIPickerView가 회전을 멈추고 초기 값 (회전하기 전) 만 검색하기 전에 저장 버튼을 누르는 것으로보고했습니다.iphone에서 uipickerview 애니메이션을 프로그래밍 방식으로 중지합니다.

사용자가 회전 중 활성 선택된 항목을 저장하거나 피드백을 얻으면 UIPickerView의 현재 선택된 항목을 가져 오는 방법이 있습니까?

감사

"저장"버튼 클릭에
+0

회전 중 무엇을 의미합니까? 내가 아는 iPhone UI의 유일한 회전 요소는 UIActivityIndicatorView – Max

+0

입니다. 시도하지는 않았지만 회전하는 동안 어떻게해야합니까? '[picker selectRow : [picker selectedRowInComponent : i] inComponent : i animated : YES];'가지고있는 각 구성 요소에 대해? – nacho4d

+0

iPhone에서 @Max를 사용하면 uipickerview를 스 와이프하여 슬롯 머신 스타일로 스 와이프 할 수 있습니다 (슬롯 머신 스타일) – zsniperx

답변

0

, 당신은,

[component1Array objectAtIndex:[myPicker selectedRowInComponent:1]]; 

곳으로 구성 요소에서 선택한 개체를 검색 할 수 있습니다

  • "component1Array"는있는 NSArray 또는 입니다있는 NSMutableArray , 에 붙어 있던 물건은, 내용물 (생의 내용)을 에 표시합니다.
  • "myPicker"는 선택기를 표시하는 UIPickerView 개체 입니다.
  • "[myPicker selectedRowInComponent : 1]" 은 의 '1'구성 요소에있는 myPicker에서 현재 선택된 원시 번호를 반환합니다.

"[myPicker selectedRowInComponent : 2]"는 구성 요소 '2'의 myPicker에서 현재 선택된 원시 번호를 반환합니다. 당신은

[component2Array objectAtIndex:[myPicker selectedRowInComponent:2]]; 

하여 컴포넌트 2에서 선택한 개체를 검색 할 수 있습니다 당신을 위해 작동 바랍니다.

+2

문제는 저장 버튼을 클릭 할 때 피커보기가 계속 돌아가는 경우 선택한 행이 아직 설정되지 않았기 때문입니다. 선택 강조가 표시되는 행이 아닌, 항상 이전에 선택된 행을 반환하므로 문제가 해결되지 않습니다. 문제는 회전하는 동안 나타나는 행을 선택하기 위해 피커보기에 강제로 표시하는 방법입니다. 나는 네가 할 수 있다고 생각하지 않는다. – Jasarien

1

나는 이것이 UIPickerView으로 해결할 수있는 문제는 아니라고 생각합니다.

애니메이션을 중지하지 않고 현재 선택된 행을 선택할 수 없습니다 (따라서 피커보기가 중지 된 행을 선택 함). 유일한 방법은 피킹 자에게 selectRow:inComponent:animated:을 사용하여 멈출 행을 알리는 것이지만 행이 무엇인지 어떻게 알 수 있습니까? 피커가 회전하고 있기 때문에 당신은 모른다.

이것은 단지 UIPickerView의 한계 일 뿐이며 애플은 예상 된 행동으로 묘사 할 가능성이 높다.

+0

pickerView의 selectedRowInComponent 메소드를 사용하여 현재 행을 가져올 수 있습니다. pickerView가 회전중인 경우에도 마찬가지입니다. –

2

titleForRow 방법을 사용하여이 문제를 파악한 적이 있습니까? pickerview이 스크롤 할 때 titleForRow 메서드가 호출되어 피커가 회전하는 방식에 따라 현재 표시된 행 위나 아래에 행을 채 웁니다. 피커가 멈 추면 didSelectRow 메서드가 호출되고 반환되는 행은 titleForRow 메서드에서 채워진 마지막 행의 2 행입니다.

난 당신이 다음 스크롤과 (타이머 구성 요소를 캡처하고 전화에서 행하기 titleForRow 코드를 이야기하는 데 사용되는 점을 감지하는) 어떤 점에서 피커를 중지하도록 선택할 수 있다고 생각

설정하는 selectRow을 회전을 멈춘 후 원하는 값을 반환합니다 (didSelectRow 호출 됨).

4

피커가 계속 회전하는 동안 피커를 닫더라도 피커는 표시되지 않는 경우에도 마지막 선택된 행이 표시된 대리인을 계속 호출합니다. 아직 할당을 취소하지 않았다고 가정하면 위임 수신자가 선택기가 표시되는지 확인하도록 설정하고, 그렇지 않으면 선택 값을 저장하십시오.

사용자가 임의의 값으로 스크롤하지 않는 것이 확실한 것으로 가정합니다. 일반적으로 사용자가 스크롤을하고 기다리지 않고 닫을 때 목록의 맨 위나 맨 아래로 스크롤됩니다. 이 두 가지 경우에 위임자의 결과를 안전하게 사용할 수 있다고 말하고 싶습니다.

+0

당신은 지금까지 가장 가까운 대답입니다! 그것은 그것이 유효한 해결책 인 것처럼 보일 것입니다. 그러나 내 선택기는 UIActionSheet에 있으므로 UIActionSheet의 도구 모음에있는 버튼을 누르면 풀릴 것입니다.이 버튼은 많은 행이 없기 때문에 회전하는 동안 발생할 가능성이 큽니다. 이 문제를 해결하는 방법이나 프로그래밍 방식으로 중단하는 방법에 대한 제안 사항이 있습니까? 그럼에도 불구하고 위로 표를 붙이십시오 – zsniperx

+0

처음에 이것에 대해 생각하지 않기 위해 조금 차서 차가워지면서 너무 많은 Shaun에게 감사하지만 완전히 나를 도왔습니다 !! 다시 고마워! – crojassoto

1

동일한 문제가 있습니다 ... 피커 값을 닫거나 선택하는 메서드에 다음 코드 줄을 추가하여 해결했습니다.

[_picker selectRow:[_picker selectedRowInComponent:0] inComponent:0 animated:YES]; 
1

필자의 경우에 적합한 해결책을 찾았습니다. 마지막 업데이트 이벤트가 필요하지 않습니다. 사용자가 해지 한 후 선택기가 회전을 멈출 때 생성됩니다. 따라서이 메서드는 스크롤을 중지하고 새 업데이트 선택 이벤트를 발생시키지 않습니다. 이 후에 피커에서 선택 항목이 정상인지 확인합니다 (피커를 표시 할 때 값을 다시 선택합니다.).

- (void)_resetPickerViewDelegates { 
    id delegate = [_pickerView.delegate retain]; 
    id dataSource = [_pickerView.dataSource retain]; 

    _pickerView.delegate = nil; 
    _pickerView.dataSource = nil; 
    [_pickerView reloadAllComponents]; 
    _pickerView.delegate = delegate; 
    _pickerView.dataSource = dataSource; 

    [delegate release]; 
    [dataSource release];  
} 
0

"해킹"일 수 있지만 작동합니다. 제 경우는 약간 다릅니다. 하나의 UIPicker을 사용하고 있지만 어떤 객체인지는 조작 할 수 있습니다.

내 문제는 하나의 개체를 선택하고 선택기를 돌리면서 스핀을 마쳤을 때 다른 개체를 선택할 수 있다는 것이 었습니다. 새로운 객체가 무시되는 것보다 그 스핀의 최종 가치를 얻고 있다는 것이 결국 일어났습니다.

UIPicker을 설정할 때 내가 업데이트 한 것으로 가정 된 고유 한 tag을 부여했을 것입니다.

그런 다음 회전이 끝나면 태그가 계속 정렬되는지 확인합니다.

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
    { 
     if (pickerView.tag == [self.myObject.position integerValue]) { 
      ... 
     } 
    } 

나는 애플의 측면에 작동 ​​방법을 잘 모르겠지만, 이것은 나를 위해 작동하기에 충분했다.

부수적으로이 문제에 대해서는 확실하지 않지만 UIPickerUITableViewCell이지만 재사용 가능한 셀이므로 문제가 발생했기 때문에 UIPicker가 한 번에 한 화면 씩 다른 위치로 옮길 때와 동일합니다.