2011-01-28 32 views
8

Tôi đã gặp sự cố khi triển khai UITableView trong ứng dụng iOS mà tôi đang thực hiện (iOS SDK 4.2). Nếu tôi nhấn vào một ô trong Dạng xem Bảng, sau đó cuộn chế độ xem sao cho ô rời khỏi màn hình, khi nó trở lại chế độ xem, ô được chọn gần đây nhất đã được chọn lại.UITableViewCell được chọn lại khi cuộn lại trên màn hình

Để kiểm tra điều này tôi đã tạo một dự án Xem Dựa ứng dụng mới, kéo ra khỏi một UITableView trong Interface Builder, và thiết lập bộ điều khiển xem như là nguồn dữ liệu quan điểm của bảng và đại biểu, và đặt đoạn mã sau vào bộ điều khiển xem:

- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section { 
    return 12; 
} 

- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { 
    static NSString *cellID = @"aCellID"; 

    UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!aCell) { 
     aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease]; 
    } 

    aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1]; 

    return aCell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath]; 
    [aCell setSelected:NO animated:YES]; 
} 

Khi chạy điều này (trong trình mô phỏng hoặc trên thiết bị) nếu tôi chạm vào bất kỳ ô nào (ví dụ 12 ô), nó sẽ được chọn và bỏ chọn. Sau này, không có ô nào trong bảng hiện được chọn, nếu tôi cuộn chế độ xem sao cho ô được chọn gần đây nhất (12 trong trường hợp này) rời khỏi màn hình, nó sẽ được chọn lại khi nó xuất hiện trở lại.

Đây có phải là hành vi mặc định dự định cho UITableView không? Hoặc có thể là lỗi trong quá trình triển khai của tôi? Cách tốt nhất để bỏ chọn ô này trong tình huống này là gì?

Trả lời

13

Nó đã cho tôi hỏi để tìm một này ra bản thân mình:

Vấn đề của tôi đã sử dụng phương pháp UITableViewCellsetSelected: thay vì sử dụng các phương pháp UITableViewdeselectRowAtIndexPath:.

+0

cảm ơn! Tôi gặp vấn đề tương tự. – Marky

+0

bạn vẫn có thể tái tạo hoạt ảnh mà nó chọn nó trong một thời gian ngắn và sau đó bỏ chọn nó ngay sau đó? – chourobin

+0

@ cr54 Có, bạn vẫn có thể nhận được hiệu ứng hoạt hình như thế này: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animated: YES]; } –

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