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?
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?
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:
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.
Tải tất cả các chế độ xem từ xib. NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];
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];
}
}
u đang sử dụng tablview đơn? –