문제

탭보기 내부에 테이블 뷰가있는 iOS 앱을 작성하고 있습니다. 내 UITableViewController, 나는 구현했다 -tableView:didSelectRowAtIndexPath:, 그러나 런타임에 행을 선택하면 메소드가 호출되지 않습니다. 테이블보기가 채워져 있으므로 컨트롤러의 다른 테이블 뷰 메소드가 호출되고 있음을 알고 있습니다.

누구든지 내가 이런 일을하기 위해 내가 망친 것들이 있습니까?

도움이 되었습니까?

해결책

아마도 클래스가 아닌 것 같습니다 UITableViewDelegate 그래도 그 테이블 뷰를 위해 UITableViewController 자동으로 설정해야합니다.

대의원을 다른 클래스로 재설정 할 가능성이 있습니까?

다른 팁

누군가가 저와 같은 멍청한 실수를 한 경우를 대비하여 :

당신이 기대하는 것의 메소드 이름을 확인하십시오. didSelect 실수로 얻을 수 있습니다 didDeselect 어떤 식 으로든. 내가 알아내는 데 약 2 시간이 걸렸습니다 ...

문제로 이어질 수있는 또 다른 것은 선택한 선택 종류가 아닙니다.

UITableView selection kind

해야한다 Single Selection 정상적인 선택의 경우 ~ 아니다 ~이다 No Selection.

또 다른 가능성은 UitapgesturereCognizer가 여기에서와 같이 이벤트를 먹을 수 있다는 것입니다. https://stackoverflow.com/a/9248827/214070

테이블 셀이 탭이 통과하는 것처럼 여전히 파란색을 강조하기 때문에이 원인을 의심하지 않았습니다.

모든 좋은 대답이지만, 찾아야 할 것이 더 있습니다 ...

(특히 Uitableview를 프로그래밍 방식으로 만들 때)

테이블 뷰가 설정하여 선택에 응답 할 수 있는지 확인하십시오. [tableView setAllowsSelection:YES]; 또는 설정하는 라인을 제거합니다 NO.

문제가 발생하면 UITapGestureRecognizer 당신은 이것을 고칠 수 있습니다 :

  • 스토리 보드에서 :

enter image description here

코드로 Objective-C:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap];

[tap setCancelsTouchesInView:NO];

코드로 Swift:

let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)

tap.cancelsTouchesInView = false

나는이 상황에서 두 가지를 만났다.

  1. uitableviewdelegate 프로토콜을 구현하는 것을 잊어 버렸거나 클래스와 테이블 뷰 사이에 대표단 출구가 없습니다.

  2. 당신은 당신의 행 안에 Uiview가 첫 번째 응답자이고 클릭을 멀리 가져갈 수 있습니다. Uibutton 또는 비슷한 것을 말하십시오.

나는 같은 문제가 있었다. 그리고 찾기가 어려웠습니다. 그러나 내 코드 어딘가에는 다음과 같습니다.

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    return nil;
}

그럴 것입니다 return indexPath, 또 다른 -tableView:didSelectRowAtIndexPath: 호출되지 않습니다.

UitableView 위에 GesturereCognizer를 추가하면 didSelectRowAtIndexPath 부름을받지 못할 것입니다.

따라서 특별한 관점에서 접촉을 피하려면 GesturereCognizer 대표 방법을 사용해야합니다.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isDescendantOfView:YourTable]) {
        return NO;
    }
    return YES;
}

코드를 보지 않은 몇 달 후에는 필요하지 않은 일부 요구 사항으로 인해 다음 방법을 구현 한 것을 잊어 버린 문제가 발생했습니다.

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath  *)indexPath{
    return NO;
}

선택하기 위해 행에 예를 반환해야합니다.

이 옵션을 선택해야합니다

enter image description here

그러나 당신이 만들고 싶다면 UITableView클릭에 강조하지 않으면 변경해야합니다. UITableViewCell 속성.

아래와 같이 선택할 수없는 옵션을 선택하십시오

enter image description here

나는 a UITapGestureRecognizer 내 테이블 뷰에서 방지하는 키보드를 기각하기 위해 didSelectRowAtIndexPath: 부름에서. 그것이 누군가를 돕기를 바랍니다.

나와 같은 문제가있는 경우 : TableView가 편집 모드에 있으면이 메소드가 호출되지 않습니다. selectselectionDuringEditing을 true로 설정해야합니다.

이 질문을 통해 : 편집 할 때`uitableview`는 didselectrowatindexpath를 호출하지 않습니다 ??

나는 같은 문제가 있었는데

그 이유는 사용이었습니다 UITapGestureRecognizer. 다른 곳을 두드렸을 때 키보드가 기각되기를 원했습니다. 나는 이것이 모든 탭 동작을 무시한다는 것을 깨달았습니다. didSelectRowAtIndexPath 기능은 호출되지 않았습니다.

내가 관련된 행에 댓글을 달 때 UITapGestureRecognizer, 효과가있다. 또한 기능을 확인할 수 있습니다 UITapGestureRecognizer selector 탭이있는 경우 UITableViewCell 아니면 아니에요.

Xcode 6.4의 경우 Swift 1.2. 선택 "태그"는 IB에서 변경되었습니다. 나는 방법과 이유를 모른다. "단일 선택"으로 설정하면 테이블 뷰 셀이 다시 선택할 수있었습니다. enter image description here

제 경우에는 DidSelCtrowAtIndexPath가 전화를 걸지 않기 때문입니다. 없음 에서 선택 TableView의 속성 단일 선택 내 문제를 해결했습니다

enter image description here

또 다른 답변이 받아 들여졌지만이 문제를 관찰하는 사람들에게 가능한 한 가지 문제와 해결책을 추가하겠습니다.

ARC (Automatic Reference Counting)가 켜져있는 경우 컨트롤러를보기의 대의원으로 할당 한 후에도 ARC가 컨트롤러를 삭제하기 때문에 컨트롤러에 대한 뷰의 메시지가 수신되지 않을 수 있습니다. 분명히 uitableview의 대의원 포인터는 아크의 참조로 계산되지 않으므로 그것이 유일한 참조이면 컨트롤러가 거래 될 것입니다. 컨트롤러에서 Dealloc 메소드를 구현하고 중단 점 또는 NSLOG 호출을 설정하여 이것이 발생하는지 여부를 확인할 수 있습니다.

솔루션은 더 이상 필요하지 않을 때까지 다른 곳에서 강력한 참조로 컨트롤러를 추적하는 것입니다.

다음과 같이 viewDidload 메소드에서 데이터 소스를 설정하고 대의원을 설정해야합니다.

[self.tableView setDelegate:self];

[self.tableView setDataSource:self];

내 문제는 위의 문제가 아니었다. 그리고 너무 절름발이. 그러나 나는 그것이 누군가를 돕는 경우를 대비하여 여기에 나열 할 것이라고 생각했습니다.

나는있다 tableViewController 이것이 바로 "기본"컨트롤러 이며이 컨트롤러의 서브 클래스를 만듭니다. 나는 모든 코드를 작성하고 있었다 tableView:didSelectRowAtIndexPath "기본"클래스의 일상. 기본적 으로이 루틴도 내 모든 서브 클래스에서도 만들어졌지만 (아무것도하지 않은 코드가 없음) 만들어 졌다는 것을 완전히 잊어 버렸습니다. 그래서 앱을 실행했을 때 코드의 서브 클래스 버전을 실행하고 아무것도하지 않았으며 슬퍼했습니다. 물론, 일단 서브 클래스에서 루틴을 제거하면 MT "Base"클래스 루틴을 사용했으며 사업을하고 있습니다.

알아요. 웃지 마세요. 하지만 아마도 이것은 내가 잃어버린 시간을 구할 것입니다 ...

이것에 대해 2 센트를 제공합니다.

나는 사용자 정의 UitableViewCell을 가지고 있었고 전체 셀을 덮는 버튼이 있었으므로 터치가 일어 났을 때 셀이 아닌 버튼을 선택했습니다.

버튼을 제거하거나 내 경우에는 버튼에서 사용자 층 활성화를 설정하여 셀이 선택한 방식으로 설정했습니다.

이것을 읽으면 여전히 문제를 해결하지 못합니다.

나는 가지고있다 커스텀 셀, 여기서 확인란 "사용자 상호 작용이 활성화되었습니다"비활성화되었다. 그래서 나는 단지 그것을 켜라. 행운을 빕니다.

방금 이것을 가지고 있었고 과거에 나에게 일어난 것처럼 방법을 추가하려고 할 때 자동 완성에주의를 기울이지 않았고 실제로 구현을하게 되었기 때문에 효과가 없었습니다. tableView:didDeselectRowAtIndexPath: 대신에 tableView:didSelectRowAtIndexPath:.

나는 오래되었고 문제가 해결되었지만 비슷한 문제가 있었는데, 문제는 내 Custom UitableViewCell과 관련이 있다고 생각했지만 솔루션은 완전히 다르다고 생각했습니다. Xcode를 다시 시작한 다음 OK! 거의 Windows와 같습니다 :)

테이블보기가 편집 모드에있는 경우 (예 : [tableView setEditing:YES animated:NO];), 당신은 설정해야합니다 tableView.allowsSelectionDuringEditing = YES;

구현했는지 확인하십시오 tableView:didSelectRowAtIndexPath 그리고 아닙니다 tableView:didDeSelectRowAtIndexPath

이것은 몇 번 이상 나를 데려 갔다 !!

당신이 할 수있는 또 다른 실수 (내가했던 것처럼) : 셀에 segue를 설정하면, didSelectRowAtIndexPath 호출되지 않습니다. 대신 뷰 컨트롤러에서 Segues를 설정해야합니다.

이 답변 중 어느 것도 저에게 도움이되지 않았습니다. 약 1 시간 후, 나는 매우 교활한 것을 알아 냈습니다.

다른 테이블 뷰의 셀 안에 테이블 뷰가 있습니다. 나는 무엇보다도 내부 테이블 뷰를 포함하는 동봉보기를 만들기로 결정했습니다. 나는이보기를 ContentView라고 불렀고 xib에 연결했습니다.

UitableViewCell은 이미 ContentView를 가지고 있으며 이상한 일을한다는 것이 밝혀졌습니다. 이 문제는 내가 MainContentView로 이름을 바꾸고이 이름이 변경된 속성에 대한 견해를 다시 연결했을 때 스스로 해결되었습니다.

제 경우에는 높이를 동적으로 계산합니다. TableView'에스 SuperView 로드 시간에. 오해로 인해 TableView 외부에 위치했습니다 SuperView. 그만큼 TableView 잘 그려졌지만 모든 상호 작용이 비활성화되었습니다 ( didSelectRowAtIndexPath 호출되지 않았다). 시각적 표시가 없기 때문에 감지하기가 매우 어렵습니다. TableView 는 접근 할 수 없습니다".

제 경우에는 솔루션이 아래 함수에서 아니오를 YES로 변경하는 것이 었습니다.

iOS 9+

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

좋아, 방금이 문제를 해결함에 따라 여기에서 업데이트했으며 내 문제는 여기에서 찾은 것과 약간 다릅니다.

나는 IB를보고 대의원이 설정된 것을 보았지만 파일 소유자 대신보기로 잘못 설정되었습니다 (테이블보기를 마우스 오른쪽 버튼으로 클릭하여 대의원이 어디로 가리키고 있는지 확인).

그것이 누군가를 돕기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top