68

Tôi đã gặp phải một lỗi thực sự khó hiểu. đầu tiên hàng của UITableView của tôi trả về và giây một trả về trong indexPath! Làm sao nó có thể xảy ra?didSelectRowAtIndexPath trả về sai IndexPath

Trong chế độ xem `- (void) viewDidLoad` của tôi vẫn ổn. Tôi đang tô sáng hàng đầu tiên thành công với

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

Tôi có biến số currentRow để theo dõi hàng nào được chọn (một điều khiển khác thay đổi theo tùy chọn nào hiện được chọn).

Bây giờ trong `chức năng đại biểu didDeselectRowAtIndexPath` của tôi, tôi có:

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

Nhật ký cho thấy như sau:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0] khi tôi chạm vào thứ hai hàng , và IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] khi tôi chạm vào đầu tiên hàng.

Không có chèn hoặc xóa hàng, v.v., thậm chí không cuộn. Nó là một UITableView đơn giản, phong cách nhóm, với 1 phần và 3 hàng. Điều gì có thể gây ra điều này?

Nhờ sự giúp đỡ của bạn,
S

Trả lời

224

Bạn đã thực hiện didDeselectRowAtIndexPath. Nó sẽ được kích hoạt khi hàng là không còn được chọn.

Khi bạn chạm vào hàng thứ hai, hàng đầu tiên là không còn được chọn, vì vậy [0, 1] sẽ được hiển thị.
Khi bạn chạm lại hàng đầu tiên, hàng thứ hai bây giờ là không còn được chọn, vì vậy [0, 0] sẽ được hiển thị.

Đây là những dự kiến ​​hoàn toàn.

Triển khai didSelectRowAtIndexPath nếu bạn cần phản hồi khi hàng là được chọn.

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

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

Heh - Tôi đã bỏ lỡ điều đó khi tôi tự mình đọc câu hỏi. :-) Nó giống như thiếu từ "the" khi nó được sử dụng hai lần. ;-) –

+3

Tôi cũng đã làm điều này. Bực bội như thế nào. Intellisense là tuyệt vời 99,9% thời gian nhưng khác .1% ... wow. – swilliams

+4

Tôi chỉ mất vài giờ để tìm ra iOS đã gọi cho tôi bằng hàng mà tôi đã chọn trước đây. Tôi đã thử mọi thứ. Thật tuyệt vời khi một vài chữ cái khác biệt. Bí ẩn được giải quyết. –

3

Mặc dù tiêu đề, phương pháp quá tải là trong thực tế didDeselectRowAtIndexPath, vì vậy nó có vẻ như hành vi này là đúng - khi hàng 1th được xúc động, các 0 bị bỏ chọn, và ngược lại.

+0

Tôi đã đi từ cùng một vấn đề :) –

Các vấn đề liên quan