- SelectRowAtIndexPath: 호출되지 않음
iOS를 사용합니다.의 마마 my에서는UITableViewController
구현했습니다.-tableView:didSelectRowAtIndexPath:
실행 시 행을 선택하면 메서드가 호출되지 않습니다.단, 테이블 뷰가 입력되고 있기 때문에 컨트롤러의 다른 tableView메서드가 호출되고 있는 것을 알고 있습니다.
내가 뭘 망쳐서 이런 일이 일어났는지 아는 사람 있어?
나처럼 멍청한 실수를 저지를 경우를 대비해서:
이 ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.didSelect
않게 수도 있다didDeselect
어떤 식으로든.'2' '2' '2'...
이 문제를 일으킬 수 있는 또 다른 원인은 선택 종류가 선택되지 않았다는 것입니다.
Single Selection
통상적인 선택에서는, 다음과 같이 해서는 안 된다.No Selection
.
프로그래밍 방식으로 이를 수행하려면 다음을 수행합니다.
tableView.allowsSelection = YES
또 다른 가능성은 UITapGestureRecognizer가 이벤트를 먹었을 수 있다는 것입니다.여기에서는 https://stackoverflow.com/a/9248827/214070 를 참조해 주세요.
테이블 셀은 탭이 통과하는 것처럼 계속 파란색으로 강조 표시되어 있기 때문에 이 원인을 의심하지 않았습니다.
모두 좋은 대답이지만, 조심해야 할 게 하나 더 있어...
(특히 UITable View를 프로그래밍 방식으로 작성하는 경우)
가 tableView를 설정하여 할 수 합니다.[tableView setAllowsSelection:YES];
이 이 '어느 행이든'으로 설정되어 행을 삭제합니다.NO
.
는 아마 '아예'가 것 .UITableViewDelegate
뷰에 는, 「 」의 단, 「 」를 참조해 주세요.UITableViewController
자동으로 설정되도록 되어 있습니다.
딜러를 다른 클래스로 재설정할 수 있습니까?
UITapGestureRecognizer
수 요.
- 스토리보드:
와와 with와 Objective-C
:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap setCancelsTouchesInView:NO];
와와 with와 Swift
:
let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)
tap.cancelsTouchesInView = false
나는 이 상황에서 두 가지 일을 만났다.
UITableViewDelegate 프로토콜을 구현하지 않았거나 클래스와 테이블 뷰 사이에 위임 아웃렛이 없습니다.
첫 번째 응답자가 되어 클릭을 하지 않는 UIView가 열 안에 있을 수 있습니다.UIButton이나 비슷한 말을 하세요.
저도 같은 문제가 있었어요.찾기가 어려웠어요하지만 내 코드 어디엔가 이런 게 있었어
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
return nil;
}
그럴 것이다.return indexPath
않으면, advised advised advisor-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;
}
행을 선택하려면 행에 대해 YES를 반환해야 합니다.
다음 옵션을 선택해야 합니다.
, '만들기'를 하고 UITableView
되지 않은 .UITableViewCell
★★★★★★ 。
[ Selection ](선택)에서 [None](없음)]옵션을 선택합니다.
나는 그것을 넣었었다.UITapGestureRecognizer
내 테이블 뷰에 있는 키보드를 해제하기 위해didSelectRowAtIndexPath:
불리지 않도록.도움이 됐으면 좋겠는데
저와 같은 문제가 있는 경우:tableView가 편집 모드일 경우 이 메서드는 호출되지 않는 것 같습니다.허용을 설정해야 합니다.Selection Editing to true.
이 질문을 통해:편집 시 'UITableView'는 didSelectRowAt를 호출하지 않습니다.IndexPath ?
나도 같은 문제가 있었어
그 이유는 을 사용했기 때문입니다.UITapGestureRecognizer
다른 곳을 탭 했을 때 키보드가 꺼지길 바랐습니다. 탭걸 그래서didSelectRowAtIndexPath
이치노
UITapGestureRecognizer
합니다.그건 효과가 있다. '아, 하다, 하다'의 기능을 확인할 수 있습니다.UITapGestureRecognizer selector
UITableViewCell
그렇지 않으면.
제 경우 didSelctRowAt는IndexPath가 호출되지 않는 것은 tableView의 Selection 속성에서 none을 선택하지 않았기 때문입니다.단일 선택으로 설정하면 문제가 해결됩니다.
Xcode 6.4의 경우 Swift 1.2. IB에서 선택 항목인 "태그"가 변경되었습니다.어떻게, 왜 그런지는 모르겠어요."Single Selection(단일 선택)"으로 설정하면 테이블 뷰 셀을 다시 선택할 수 있게 되었습니다.
다른 답변이 받아들여졌지만 이 문제를 관찰하는 분들을 위해 생각할 수 있는 문제와 해결책을 하나 더 추가하겠습니다.
Automatic Reference Counting(ARC; 자동 참조 카운트)이 켜져 있는 경우 컨트롤러를 뷰의 대리인으로 할당한 후에도 ARC가 컨트롤러를 삭제하고 있기 때문에 뷰의 컨트롤러 메시지가 수신되지 않을 수 있습니다.UITableView의 위임 포인터는 ARC에 대한 참조로 카운트되지 않기 때문에 참조가 그것뿐이라면 컨트롤러는 할당 해제됩니다.컨트롤러에 dealloc 방식을 구현하고 브레이크포인트 또는 NSlog 콜을 설정하면 이 문제가 발생하는지 여부를 확인할 수 있습니다.
해결책은 컨트롤러가 더 이상 필요하지 않을 때까지 다른 곳에서 강력한 참조를 사용하여 컨트롤러를 추적하는 것입니다.
데이터 소스와 위임은 다음과 같이 viewDidLoad 메서드로 설정해야 합니다.
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
나의 문제는 위의 어느 것도 아니었다.그리고 너무 시시해.하지만 누군가에게 도움이 될까봐 여기에 나열해 두려고 했어요.
는 나나 a a a가 있다tableViewController
을 사용하다난 the 에 쓰고 있었다.tableView:didSelectRowAtIndexPath
'무엇보다'디폴트로는 이 루틴도 작성되어 있다는 것을 까맣게 잊고 있었습니다(아무것도 하지 않은 코드는 없지만).그래서 앱을 실행했을 때 하위 클래스 버전의 코드가 실행되어 아무것도 하지 않아 슬펐습니다.그래서 물론 서브클래스에서 루틴을 삭제하면 mt "base" 클래스 루틴을 사용하여 비즈니스를 하고 있습니다.
알아, 웃지 마하지만 이렇게 하면 내가 잃은 시간을 누군가가 구할 수 있을 거야
내 2센트만 주면 돼
커스텀 UITable View Cell을 사용하고 있었는데, 셀 전체를 커버하는 버튼이 있었기 때문에 터치했을 때는 셀이 아닌 버튼이 선택되었습니다.
버튼을 삭제하거나 내 경우 버튼에서 User Interation Enable을 false로 설정하면 셀이 선택됩니다.
이 글을 읽어도 여전히 문제가 해결되지 않습니다.
사용자 지정 셀이 있으며, 여기서 "사용자 상호 작용 사용" 확인란이 비활성화되었습니다.그래서 그냥 켜면 돼행운을 빌어요.
는 이것을 만, 처럼, 할 때 하지 않았습니다. 실제로 이 되었습니다.tableView:didDeselectRowAtIndexPath
: displacestableView:didSelectRowAtIndexPath:
.
이행해 주세요.tableView:didSelectRowAtIndexPath
andtableView:didDeSelectRowAtIndexPath
이것 때문에 나는 몇 번이 아니야!!
UITapGestureRecognizer를 확인하십시오.저의 경우 테이블뷰가 배치된 뷰에 탭제스처가 추가되어 didselect와 같이 UITableview의 사용자 인터랙션을 잡아먹고 있습니다.뷰에 대해 탭 제스처를 비활성화한 후 didselect delegate가 트리거되었습니다.
「CHANGE:」라고 하는, 「CHANGEANGE:[tableView setEditing:YES animated:NO];
을 설정할 .tableView.allowsSelectionDuringEditing = YES;
저의 경우, 아래 기능에서 NO를 YES로 변경하는 것이 해결책이었습니다.
iOS 9 이상
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
하다 보면요?viewController
에는 다음 방법이 있습니다.
- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
'아니오'를 반환하면 SelectRow가 호출되지 않습니다.
오래된 것은 알고 있습니다만, 같은 문제가 있었습니다만, 커스텀 UITableViewCell에 문제가 있다고 생각했습니다만, 해결 방법은 전혀 다릅니다.XCode 를 재기동하면, Windows 와 같이 정상적으로 동작합니다.
다른 하면 세가, 셀에 세가, 셀에 세가, 셀에 세가, 셀에 세가, 셀에 세가, 셀에 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 셀 세가, 세가, 셀 세가, 셀 세가, 셀 세가,didSelectRowAtIndexPath
을 사용하다대신 뷰 컨트롤러에서 세그먼트를 설정해야 합니다.
나는 이 대답들 중 어느 것도 통하지 않았다.약 한 시간 후에, 나는 매우 음흉한 것을 알아냈다.
다른 테이블 뷰의 셀 안에 테이블 뷰가 있습니다.나는 무엇보다도 안쪽 테이블 뷰를 포함하는 동봉 뷰를 만들기로 했다.이 뷰의 contentView를 호출하여 xib에 연결했습니다.
UITableViewCell은 이미 contentView를 가지고 있어 이상한 일을 하고 있는 것으로 나타났습니다.속성 이름을 mainContentView로 변경하고 보기를 이름이 바뀐 속성에 다시 연결하면 문제가 자동으로 해결되었습니다.
언급URL : https://stackoverflow.com/questions/255927/didselectrowatindexpath-not-being-called
'source' 카테고리의 다른 글
WPF의 디자인 타임 전용 배경색? (0) | 2023.04.22 |
---|---|
Swift에서 viewController 인스턴스화 및 표시 (0) | 2023.04.22 |
원래 GitHub 저장소에서 분기된 GitHub 저장소로 새 업데이트를 가져옵니다. (0) | 2023.04.22 |
지정된 이름의 도커 컨테이너가 존재하지 않는 경우에만 Bash 명령을 실행하는 방법 (0) | 2023.04.22 |
필요한 경우에만 소수점을 표시하는 Excel 번호 형식 (0) | 2023.04.22 |