2011-02-18 2 views
2

하나의 섹션과 많은 행을 가진 UITableViewController 그룹화되어 있습니다. 각 cellUILabel (설명 포함)과 UITextField (입력 용)의 두 요소로 구성됩니다. 양식, 나는 말할 것이다.becomeFirstResponder : 첫 번째 응답자가 될 UIControl로 자동 스크롤

하단에는 "다음"버튼이있어서 다음보기로 이동합니다. 하지만 그 전에는 UITextField의 유효성을 검사합니다. 사용자가 입력란을 채우지 않은 경우이 입력란에 포커스가 있어야 사용자가 뭔가를 입력해야한다는 것을 알 수 있습니다. 나는이 함께 노력 :

[inputField becomeFirstResponder]; 

이 기억 나는 누른 버튼이 내 시야의 바닥에 하고 UITextField 상단것을 상상한다. 이 상황에서는 필드가 너무 멀리 떨어져 있기 때문에 필드가 포커스를 얻지 못합니다. 이제 내가 천천히 스크롤하고 필드가 보일 때 필드가 첫 번째 응답자가되어 커서를 얻습니다 .- 결론 : becomeFirstResponder은 효과가 있었지만 정확하게하고 싶지는 않았습니다. 내 손가락으로 위로 스크롤하고 싶지 않아요, 필드는 포커스를 얻고 자동으로 표시되어야합니다.

직접 내 필드로 "점프"할 수있는 방법이 있습니까? becomeFirstResponder의 대안을 사용 하시겠습니까? 자동으로 내 필드로 스크롤 하시겠습니까?

도움 주셔서 감사합니다. 당신이 편집 할의 UITextField와 셀의 인덱스를 알고 있다면 당신은 becomeFirstResponder를 호출하기 전에

답변

4

,



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index]; 
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES] 

를 사용합니다.

셀이 화면을 벗어난 경우 becomeFirstResponder가 일부 iOS 버전에서 실패 할 수 있습니다. 또한 일부 버전에서는 일부 상황 (예 : Apple 코드가 응답자가 스크롤하지 않고 화면에서 벗어난 것으로 판단한 경우)에서 추가로 표보기를 스크롤합니다. 이러한 문제를 해결하려면 스크롤 애니메이션이 완료된 후 첫 번째 응답자가되어야 할 수도 있습니다.

+0

좋아요! 고맙습니다 :-) – Manni

+0

추신 : 첫 번째 줄은 "NSIndexPath * indexPath = [NSIndexPath indexPathForRow : your_cell_index inSection : your_section_index];"이어야합니다. 또는? – Manni

+0

팁 주셔서 감사. 이 선택기는 NSIndexPath에 가져 오는 추가 UIKit입니다. 분명히 나는 ​​이것을 포함하지 않는 맥 문서를보고 있었다. 감사합니다 –

0

동일한 문제가 있습니다. 두 작업에 동시에 발생하는 UIAnimation 때문입니다.. 따라서 scrollToRowAtIndexPath에 대한 UIAnimation은 becomeFirstResponder를 무시합니다.

해결책은 될 애니메이션 효과 그것의 하나또는 그렇지 않으면 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];를 사용하여 해제 할 수 있습니다.

관련 문제