Programing

UITableView didSelectRowAtIndexPath : 첫 번째 탭에서 호출되지 않음

lottogame 2020. 3. 1. 15:36
반응형

UITableView didSelectRowAtIndexPath : 첫 번째 탭에서 호출되지 않음


에 문제가 UITableView's didSelectRowAtIndexPath있습니다.

내 테이블은 행을 선택할 때 새보기 컨트롤러를 초기화하고 푸시하도록 설정되어 있습니다.

테이블의 행을 처음 탭하면 메서드가 호출되지 않습니다. 다른 행을 선택하면 정상적으로 작동하기 시작합니다.

에 중단 점을 설정하여이를 확인했습니다 didSelectRowAtIndexPath. NSLog메소드에를 추가하면 마지막으로 새보기 컨트롤러를 푸시하는 두 번째 행을 선택하면 동시에 두 개의 로그 문이 콘솔에 나타납니다.

어떤 제안?


실수로 입력 한 모든 기회는 한 selectRowAtIndexPath를?


또한 xib 파일에서 테이블 뷰의 선택 속성을 확인하십시오. 필요에 따라 '단일 선택'또는 '복수 선택'을 사용하십시오.


다음과 같은 문제가 발생했습니다.

  • 행의 첫 번째 탭-> 효과 없음, 선택 없음, 절대
  • 두 번째 탭 및 다음-> 올바른 선택 동작, 항상

제 경우에는 Show Selection on Touch인터페이스 빌더에서 오류가 확인 되었습니다. IB에서 여기를 선택 해제 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

누군가를 돕는 희망


수업에 제스처 인식기를 설정했는지 확인하십시오. 제스처를 제거하는 것이 나를 위해 일했습니다.


별이 정렬되기 위해 별이 정렬되어 있다고 생각하기 때문에이 답변을 게시하는 것에 대해서도 토론했습니다.

이 문제의 변형이 있고 다른 솔루션을 확인했습니다. 내 테이블보기에서 첫 번째 탭에서 테이블의 마지막 행을 처리하지 않습니다. 강조 표시되지만 didSelectRowAtIndexPath호출되지는 않습니다. 다른 모든 행은 정상적으로 작동합니다. 그러나 테이블 뷰 바운스를 켜면 문제가 해결되는 것 같습니다 (그러나 테이블 뷰 바운스를 처리해야합니다).


해당 문제를 표시하는 셀에 대해 UITableViewCellSelectionStyleNone이 설정되었습니다 (ios9).

나는 결국 전화했다

[tableView deselectRowAtIndexPath:indexPath animated:NO];

가장 먼저

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

그것은 동일하지 않지만 충분합니다. ios10이 어떤 종류의 테이블 손상을 가져 오는지 궁금합니다.


스위프트 2

이 설정이 true인지 확인하십시오.

self.tableView.allowsSelection = true

이것을 당신의 바로 다음 viewDidLoad()과 앞에 놓으십시오 .super.viewDidLoad()


스위프트 3

a가 아닌 클래스에서 Swift 3로 작업하고 UITableViewController있고 UITableViewDelegate를 사용하는 경우 메소드 제목을 사용해야 할 수도 있습니다.

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

프로젝트를 Swift 3으로 마이그레이션했지만 나에게 도움이되었습니다. 상당히 새롭기 때문에 나중에 수정 될 수 있습니다.


클래스에서 UITapGestureRecognizer를 설정 한 경우 didSelectRowAtIndexPath에이 행을 추가 할 수 있습니다.

[tableView deselectRowAtIndexPath:indexPath animated:NO];

이것은 나를 위해 일했습니다.


이 문제는 tableView 내에서 제스처 인식기를 사용하여 작업 할 때도 발생합니다.이 경우 제거 할 필요가 없으며 제스처 속성 cancelsTouchesInView = false이 터치가보기에 전달되는지 여부에 영향을 미치는 부울 값인지 확인해야합니다. 제스처가 인식됩니다.


스위프트 3

내 경우에는 다른 답변이 효과가 없었습니다.

tableView.delaysContentTouches = false


didSelectRowAt첫 번째 또는 두 번째 탭에서 응용 프로그램에서 함수가 호출되지 않았습니다 ... 문제를 해결하려고 시도했지만 해결책을 찾을 수 없었습니다. 그러나 갑자기 인식하고 뷰를 사용하고있었습니다. 애니메이션 색상 변경 ... Delegate애니메이션이 지속되는 동안 메서드가 호출되지 않았습니다


필자의 경우 제스처 인식기가있는 UITableView 섹션 헤더가 있습니다. 헤더를 탭하면 해당 섹션에 몇 개의 행을 삽입하고 확장 / 축소 섹션과 같이 삽입에 애니메이션을 적용해야합니다. 확장 및 탭했을 때 didSelectRow 델리게이트 메소드가 시작되지 않았습니다. 추가 탭 및 확장 / 축소 작업의 경우 예상대로 작동했습니다.

@Ayoub Nouri의 답변에 따라 cancelsTouchesInView를 false로 설정하면 문제가 해결되었습니다. tapGestureRecognizer? .cancelsTouchesInView = false


스위프트 4.2

속성 관리자에서 "터치 다운 지연"을 비활성화 하면 문제가 해결되었습니다.
그 후 클릭이 매끄럽고 didSelectRowAt가 즉시 실행됩니다.

XCode 속성 관리자


나를 위해 일한 것은 "didSelect ..."를 입력 한 다음 자동 수정을 나머지 부분에 채우도록하는 것이 었습니다. 분명히 내 구문에 대한 세부 사항은 놀랍습니다. 다른 사람들이 말했듯이, IDE를 사용하십시오!

참고 URL : https://stackoverflow.com/questions/2106292/uitableview-didselectrowatindexpath-not-being-called-on-first-tap



반응형