programing

행 선택 위치IndexPath가 잘못된 IndexPath를 반환함

codeshow 2023. 8. 20. 12:57
반응형

행 선택 위치IndexPath가 잘못된 IndexPath를 반환함

저는 정말로 이해하기 어려운 벌레를 만났습니다.내 UITableView의 첫 번째 은 1을 반환하고 두 번째 행은 indexPath에서 0을 반환합니다!그게 어떻게 가능할 수가 있지?

제 '-(void) view DidLoad'에서는 여전히 모든 것이 정상입니다.첫 번째 행을 성공적으로 강조 표시합니다.

currentRow = 0;
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:currentRow inSection:0] 
  animated:NO scrollPosition:UITableViewScrollPositionNone];

변수가 있습니다.currentRow선택한 행을 추적합니다(현재 선택한 행에 따라 다른 컨트롤이 변경됨).

이제 내 '행 선택 취소'에서IndexPath의 대리자 함수 I:

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSLog(@"IndexPath: %@", [indexPath description]);
}

로그에는 다음 항목이 표시됩니다.

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0]가 두 번째 줄을 건드리면, 그리고.IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] 번째 줄을 터치하면 됩니다.

행 삽입, 삭제, 정렬 등이 없으며 스크롤도 없습니다.1개의 섹션과 3개의 행이 있는 그룹화된 스타일의 단순한 UI 테이블 뷰입니다.무엇이 원인일까요?

도와주셔서 고마워요.
S

didDeseRowAt를 구현했습니다.인덱스 경로.행이 더 이상 선택되지 않으면 실행됩니다.

두 번째 행을 누르면 첫 번째 행이 더 이상 선택되지 않으므로 [0, 1]이 표시됩니다.
첫 번째 행을 다시 누르면 두 번째 행이 더 이상 선택되지 않으므로 [0, 0]이 표시됩니다.

이것들은 완전히 예상된 것들입니다.

SelectRowAt 구현행을 선택할 때 응답하기 위해 필요한 경우 IndexPath.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //                                       ^
    ...

    NSLog(@"IndexPath: %@", [indexPath description]);
}

제목에도 불구하고 오버로드된 방법은 사실didDeselectRowAtIndexPath따라서 동작이 올바른 것처럼 들립니다. 첫 번째 행을 누르면 0번째 행이 선택 취소되고, 그 반대의 경우도 마찬가지입니다.

언급URL : https://stackoverflow.com/questions/4118993/didselectrowatindexpath-returns-wrong-indexpath

반응형