2015-02-05 22 views
6

Tôi đang cố gắng sử dụng một tệp XIB cho nhiều loại lớp con UITableViewCell tùy chỉnh (cùng một IBOutlets - cùng giao diện - các phương thức và logic khác nhau).Một XIB cho nhiều lớp con UITableViewCell

Tôi có thể làm như thế nào?

+0

u đang sử dụng tablview đơn? –

Trả lời

2

Nói đúng, khung không thực thi ràng buộc chặt chẽ từ xib với chủ sở hữu tệp của nó. Bạn có thể sử dụng đoạn mã sau để tải một nib:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCustomCell" owner:nil options:nil]; 
EXFirstCustomCell *firstCell = (EXFirstCustomCell*)[nibContents objectAtIndex:0]; 
firstCell.firstView = [firstCell.contentView viewWithTag:VIEW_TAG]; 
firstCell.button = [firstCell.contentView viewWithTag:BUTTON_TAG]; 

Dựa trên logic kinh doanh của bạn, bạn có thể đúc kết quả của [nibContents objectAtIndex:0]; cho phù hợp với tùy chỉnh của bạn UITableViewCell lớp.

Chỉnh sửa # 1:

Typecasting nói chung là một ý tưởng tồi, vì firstCell vẫn sẽ loại lớp UITableViewCell. Một ý tưởng hay là tạo một hàm tạo riêng của bạn, chuyển đối số nibContents làm đối số và thực hiện các nhiệm vụ xem của bạn ở đó.

Chỉnh sửa # 2

Tôi đã làm một chút thử nghiệm và đây là làm thế nào tôi có để làm việc này:

  1. Tạo một cái nhìn xib độc lập và thiết kế di động của bạn ở đó. Nó phải là một cái nhìn. Những gì bạn đang làm ở đây là bạn đang xác định cách contentView sẽ như thế nào.

  2. Tải tất cả các chế độ xem từ xib. NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];

  3. Tạo một constructor của tế bào tùy chỉnh của bạn như vậy:

    -initWithNibContents:(NSArray*)nibContents { 
        self = [super init] 
        if(self) { 
         self.contentView = [nibContents objectAtIndex:0]; 
         self.button = [self.contentView viewWithTag:BUTTON_TAG]; 
         self.view = [self.contentView viewWithTag:VIEW_TAG]; 
        } 
    } 
    
Các vấn đề liên quan