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


352

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

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

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

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

어떤 제안?


2
에 대한 코드를 게시 할 수 있습니까 tableView:didSelectRowAtIndexPath:?
gerry3

나는 같은 문제가 있었고 내 대답을 확인하십시오 : stackoverflow.com/a/44097559/1600061
Zsivics Sanel

1
주요 큐에 파견 내 문제의 해결 stackoverflow.com/questions/20149167/...
durgeshtrivedi

답변:


1356

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


17
@Dschee 아무것도 선택 해제하지 않았으므로 첫 번째 탭에서 호출되지 않았습니다. 한 행을 선택한 후 두 번째 행을 선택하려고하면 첫 번째 행이 선택 해제됩니다.
친구

19
그래서 내가 그렇게 사랑합니다.
elbuild 2015 년

4
이 실수를 한 번만했기 때문에 나는 이것을 높이 지 않았다. 나는 몇 년 만에이 실수를 4 번 이상했기 때문에 많은 시간을 소비했기 때문에 공감했다.
Brooks Hanes

8
세상에! 이것은 내 코드에서 소개 한 최악의 버그 일 수 있습니다.
Shantanu Paul

4
와. 시간을 많이 절약했습니다.
MortalMan

24

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


2
바 하하하! 와우 나는 이것을 알아 내려고 4 시간을 보냈다. 구조에 @includeMe (경례)! 감사!

17

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

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

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

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

누군가를 돕는 희망


너는 나의 영웅이야! 이것이 이것이 기본값 인 이유는 무엇입니까? 해당 동작이있는 앱을 생각할 수 없으며 이것이 매우 이상한 기본값이라고 생각합니다.
Christophe Fondacci

12

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


나는 둘 다 가지고있다. 제스처 인식기 및 didSelectRowAtIndexPath? 그러나 항상 제스처 인식기가 우선합니다. 두 번째로 갈 수 없습니다. 둘 다 처리 할 수있는 방법이 있습니까, 아니면 제스처 인식기를 제거해야합니까? 감사!
Ron

iOS 개발 7 년 후 1 시간이 걸렸습니다.
광대

6

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

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


이런 일이 발생하는 이유를 찾으셨습니까? 나는 정확히 같은 문제가 있습니다. 테이블 수신 거부를 끄면 테이블의 첫 번째 / 마지막 행이 첫 번째 탭에서 반응하지 않습니다. 나는 그것이 버그라고 생각했지만 1 년이 넘었고 여전히 일어나고 있습니다.
filip.karas

아니요. 테이블 뷰 바운스를 켜고 그대로 두었습니다.
Chase Roberts

iPhone 5에서만이 문제가 발생합니다 (iOS 10.3). 테이블 뷰에서 바운스를 켜면 문제가 해결되었습니다. 매우 이상하다!
Lee Probert

4

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

나는 결국 전화했다

[tableView deselectRowAtIndexPath:indexPath animated:NO];

가장 먼저

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

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


이것은 나를 위해 일했지만 스타일을 선택하지 않고 선택을 숨기려면 해결 방법이 필요합니다. 재정의 setSelected했지만 사용자가 셀을 잡고있는 동안 허용되지 않는 선택이 나타납니다
MMujtabaRoohani

1

스위프트 2

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

self.tableView.allowsSelection = true

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


1

스위프트 3

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

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

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


1

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

[tableView deselectRowAtIndexPath:indexPath animated:NO];

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


1

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


0

스위프트 3

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

tableView.delaysContentTouches = false


0

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


0

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

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


0

스위프트 4.2

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

XCode 속성 관리자


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.