2013-02-15 24 views
5

Tôi đang thêm các mục (ví dụ: trình nhận dạng cử chỉ, xem phụ) vào ô trong cellForRowIndexPath. Tôi không muốn thêm những nếu các tế bào đang được tái sử dụng (có lẽ) như vậy là có một cách dễ dàng nói nếu tế bào là mới, hoặc đang được tái sử dụng?Làm cách nào để xác định xem một ô được trả về bởi dequeueReusableCellWithIdentifier có đang được sử dụng lại trong iOS 6 không?

Nguyên mẫu ô được xác định trong bảng phân cảnh.

Tôi không sử dụng lớp con tùy chỉnh cho ô (có vẻ như quá mức cần thiết). Tôi đang sử dụng thẻ di động để xác định các bản xem trước, vì vậy không thể sử dụng nó.

Tôi có thể sử dụng phương pháp tiếp cận trước iOS 6, nhưng chắc chắn có cách tốt hơn để làm điều gì đó đơn giản như vậy?

Tôi không thể tìm thấy bất kỳ điều gì trực tuyến, vì vậy, tôi có thể bị nhầm lẫn về điều gì đó - nhưng đó là điều khó tìm kiếm.

+1

Bạn không nhầm lẫn, điều này sẽ làm rối loạn mô hình một chút. – jrturton

+0

@jrturton. Cảm ơn. Tôi đã bắt đầu nghi ngờ bản thân mình. – dommer

+2

Nếu bạn không muốn thêm mọi thứ nếu ô đang được sử dụng lại, điều đó ngụ ý (tôi nghĩ) rằng bạn không thay đổi những gì bạn đang thêm một cách năng động, vậy tại sao không thêm những thứ này vào IB để bắt đầu ? – rdelmar

Trả lời

7

Cách đơn giản nhất để giải quyết vấn đề này là để kiểm tra sự tồn tại của những điều bạn cần phải thêm.

Vì vậy, giả sử ô của bạn cần có chế độ xem con với thẻ 42 nếu thẻ chưa có.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    UIView *subview = [cell viewWithTag:42]; 
    if (!subview) { 
     ... Set up the new cell 
    } 
    else { 
     ... Reuse the cell 
    } 
    return cell; 
} 
1

Có thể quá mức so với việc sử dụng phương pháp tiếp cận trước iOS6 (không đăng ký), nhưng nếu bạn thực sự muốn gắn bó với điều đó, bạn có thể sử dụng associated objects.

#import <objc/objc-runtime.h> 

static char cellCustomized; 

... 
-(UITableViewCell *)getCell 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellForIdentifier:myCell]; 
    if(!objc_getAssociatedProperty(cell, &cellCustomized)) { 
     [self setupCell:cell]; 
     objc_setAssociatedProperty(cell, &cellCustomized, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    } 
    return cell; 
} 

... 

(không kiểm tra)

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