FirstResponder가 됩니다:첫 번째 응답자가 되는 UIControl로 자동 스크롤
-
15-11-2019 - |
문제
그룹화되어 있어요 UITableViewController
하나의 섹션과 많은 행이 있습니다.각 cell
두 가지 요소로 구성됩니다.ㅏ UILabel
설명과 UITextField
입력을 위해.형태라고 말하고 싶습니다.
하단에는 다음 보기로 이동하는 "다음" 버튼이 있습니다.하지만 그 전에, 나는 UITextField
'에스:사용자가 필드를 채우지 않은 경우 이 필드에 초점이 맞춰져 사용자가 무언가를 입력해야 한다는 것을 알 수 있습니다.나는 이것을 시도했다 :
[inputField becomeFirstResponder];
기억해, 내가 누른 버튼은 바닥에 내 견해에 대해 상상해보십시오. UITextField
~이다 상단에.이런 상황에서는 필드가 너무 멀리 떨어져 있기 때문에 초점이 맞지 않습니다.이제 천천히 위로 스크롤하여 필드가 표시되면 필드가 첫 번째 응답자가 되어 커서를 얻습니다. :-) 결론:그만큼 becomeFirstResponder
작동했지만 정확히 내가 원하는 작업을 수행하지는 않았습니다.손가락으로 위로 스크롤하고 싶지 않습니다. 필드에 초점이 맞춰지고 자동으로 표시되어야 합니다.
내 분야로 직접 "점프"할 수 있는 방법이 있나요?대안을 사용하십시오 becomeFirstResponder
?내 필드로 자동으로 스크롤하시겠습니까?
당신의 도움을 주셔서 감사합니다!
해결책
편집하려는 UITextField가 있는 셀의 인덱스를 알고 있는 경우 다음을 사용하세요.
NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]
전화하기 전에 becomeFirstResponder
.
셀이 화면 밖에 있으면 일부 iOS 버전에서는 makeFirstResponder가 실패할 수 있습니다.또한 일부 버전에서는 특정 상황에서 테이블뷰에 추가 스크롤을 수행합니다(예:Apple의 코드에서 응답자가 더 이상 스크롤하지 않고도 화면 밖에 있을 것이라고 판단한 경우)이러한 문제를 해결하려면 스크롤 애니메이션이 완료된 후 최초 대응자가 되도록 호출해야 할 수도 있습니다.
다른 팁
나는 같은 문제를 가지고 있습니다. 이는 두 작업에 대해 동시에 발생하는 UIAnimation 때문입니다..따라서 scrollToRowAtIndexPath에 대한 UIAnimation은 makeFirstResponder를 무시합니다.
해결책은 다음과 같습니다. 애니메이션 효과 중 하나를 비활성화합니다. 또는 그렇지 않으면 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];
.