1

제 코드에서 나는 각각 UITableView에 약 8 UITextField을 가지고 있습니다. 또한 UIBarButtonItem을 선택하면 hideKeyboard 메서드가 호출됩니다.테이블보기에서 텍스트 필드와 함께 endEditing을 사용할 때 크래시가 발생했습니다.

사용자가 텍스트 필드를 선택한 다음 텍스트 필드가 더 이상 표시되지 않도록 키보드를 표시하고 uibarbuttonitem을 누르면 EXC_BAD_ACCESS가 표시되도록 tableview를 스크롤합니다.

텍스트 필드는 프로그래밍 방식으로 cellForRowAtIndexPath을 통해 각 행에 배치됩니다. hideKeyboard은 간단히 [self.view endEditing:YES];입니다.

내 생각 엔 endEditing이 첫 번째 응답자 인 textField를 검색하고 사임한다고 가정합니다.하지만 첫 번째 응답자가되어 표시되지 않은 방식으로 tableview를 스크롤하면 그 셀 재사용되어야하고 텍스트 필드가 할당 해제 되었어야합니다 ..하지만 endEditing 메소드는 여전히 충돌이 발생했을 때 사임하도록 호출합니다.

마지막 firstResponder에 대한 참조를 얻는 방법에 대해 생각했지만 할당 취소 되었다면 어쨌든 사임 할 수 없었습니다. 어떤 것을 모르기 때문에 becomeFirstResponder를 호출 할 수없고 임의의 텍스트 필드에서 사임 할 수 없습니다. 그 시간에 볼 수 있습니다.

아무도이 충돌의 원인을 알 수 있습니까? 키보드를 올바르게 닫으려면 어떻게해야합니까?

답변

2

아마도 사용자가 활성 텍스트 필드를 스크롤하여 보이지 않는 경우 첫 번째 응답자 상태를 종료 할 수 있습니다.

-있는 tableView : 당신은 tableViewDelegate 프로토콜 방식으로 그렇게 할 수 didEndDisplayingCell : forRowAtIndexPath :

관련 문제