2010-12-07 2 views
2

UITableView에서 선택한 행을 기반으로 채워진 UIPickerView로 UI를 설정하려고합니다. 본질적으로, 일정 응용 프로그램에서 이벤트를 추가하기 위해 시작 & 끝 화면에서 볼 수있는 것과 동일한 UI입니다.UIPickerView momentum animation을 취소 할 수 있습니까?

http://raoli.com/files/uipicker.png

나는 피커는 선택에 따라 제대로 ... 대부분의 시간을 내 모델을 업데이트 채워됩니다 그것 때문에 내 데이터 소스 및 대리인의 설정을 가지고있다.

내가 얻는 한 가지 문제점은 누군가가 픽커보기를 제빙 한 다음 선택 항목이 테이블보기에있는 경우 UIPickerViewDelegate가 원래 선택이 아닌 테이블보기에서 변경 내용을 기록하려고 시도한다는 것입니다. 그것은 분명히 내 코드에서 이런 일이 발생하고 더 나은 행동을 위해 재 작업을위한 몇 가지 아이디어가 있지만 Apple에서 UI로 수행 한 작업을 볼 수있을 것입니다.

피커를 쓸어 넘기고 피커가 회전을 완료하기 전에 시간을 전환하면 회전이 즉시 중지되고 피커가 새 유형의 값으로 업데이트되며 원래 유형의 시간은 변경되지 않습니다. 애니메이션을 취소 할 방법이 보이지 않지만 잘못 될 수 있습니다. 나는 그것이 내 인생을 더 쉽게 만들 것이기 ​​때문에 나는 틀렸다고 희망한다.

내가 볼 수있는 다른 대안은 각 속성에 대해 다른 UIPickerViews를 사용하는 것입니다. 따라서 분명히 Apple 예제에는 2 개의 UIPickerView 인스턴스가 있습니다. 그것은 단지 완료되어야하는 다른 작업을 생성하고 최소한의 견해로 그것을 수행 할 수있는 방법이 있는지를 알 것입니다.

업데이트 아론의 아이디어는 몇 가지 약속을했다,하지만 메시지는 선택 도구가 현재 애니메이션입니다 주로 여부, 피커의 상태에 따라 대리인에게 전달받을 방법에 대한 가장자리 경우가 있습니다 것 같습니다. 피커가 현재 공개 API를 통해 회전 중인지 확인할 방법이없는 것 같기 때문에 가능한 구성을 해결하기 위해 노력하는 것이 문제가있는 것으로 보입니다. 여러 피커를 사용하고, 선택된 속성이 변경 될 때 선택기의 가시성을 전환하고, 숨겨진 UIPickerView 인스턴스의 대리자 메시지를 무시했습니다.

답변

3

나는

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated 

좋은 후보가 될 것이라고 생각합니다. animatedNO 인 경우 이동하지 않고 즉시 원하는 내용을 표시해야합니다.

데이터가 설정되었다고 결정하면 피커보기의 메서드를 호출하여 해당 설정을 반영하십시오. 현재 애니메이션이나 관성 효과를 무효화하고 대리자에 didSelectRow:을받지 않기를 바랍니다. 그렇게하면 무시해야 할 수도 있습니다.

+0

멋진 생각이지만, 생각하지 못했지만 불행히도 트릭을 배트에서 벗어나는 것처럼 보이지 않습니다. 'pickerView : didSelectRow : inComponent :'와 같은 모양은'row'로 전달 된 값을 가져 오는 대신 실제로 스피너에서 값을 가져옵니다. 그래서, 비록 내가 0을 전달하더라도, 내 UIPickerDelegate는'didSelectRow :'delegate 메소드를 호출 할 때 값처럼 13을 얻는다. 그러나 하위 클래스를 통해이 문제를 해결할 수있는 아이디어가 생겼습니다. 감사! – Jablair

+0

혼란 스럽습니다 - 회 전자를 설정하려면 selectRow 또는 didSelectRow를 시도 했습니까? –

+0

나는'selectRow : inComponent : animated'를 호출하여 회 전자를 설정했고, 다음 UIPickerView 대리자 메서드 인'pickerView : didSelectRow : inComponent :'가 호출되었습니다. – Jablair