Làm cho chủ sở hữu giả sẽ hoạt động; tuy nhiên, một giải pháp như vậy có thể mong manh và không thể đọc được. Trong một ý nghĩa, các tế bào sở hữu chính nó, nhưng ngay cả đó là về mặt kỹ thuật không chính xác. Sự thật là UITableViewCell
s không có chủ sở hữu.
Cách thích hợp để triển khai các ô xem bảng tùy chỉnh là trước tiên tạo một lớp con tùy chỉnh của UITableViewCell.Trong lớp này, bạn sẽ định nghĩa tất cả các IBOutlets và cho các ô đó. Đây là một mẫu của một tập tin tiêu đề:
@interface RBPersonCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel * nameLabel;
@property (nonatomic, strong) IBOutlet UILabel * ageLabel;
- (void)setupWithPerson:(Person *)person;
@end
Từ đó, tôi có một phương pháp tiện lợi mà tạo ra các tế bào từ ngòi, nếu cần thiết:
+ (id)cellForTableView:(UITableView *)tableView reuseIdentifier:(NSString *)reuseID fromNib:(UINib *)nib {
if (!reuseID)
reuseID = [self cellIdentifier];
id cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (!cell) {
NSArray * nibObjects = [nib instantiateWithOwner:nil options:nil];
// Sanity check.
NSAssert2(([nibObjects count] > 0) &&
[[nibObjects objectAtIndex:0] isKindOfClass:[self class]],
@"Nib '%@' does not appear to contain a valid %@",
[self nibName], NSStringFromClass([self class]));
cell = [nibObjects objectAtIndex:0];
}
return cell;
}
Phương pháp này gói gọn tất cả các mã tạo vì vậy tôi không bao giờ phải xem hoặc viết lại. Nó giả định rằng ô tùy chỉnh là khung nhìn gốc đầu tiên trong ngòi bút. Đây là một giả định khá an toàn vì bạn chỉ nên có ô tùy chỉnh làm chế độ xem gốc.
Với tất cả mã này tại chỗ, bạn đã sẵn sàng làm việc trong Trình tạo giao diện. Trước tiên, bạn cần đặt lớp tùy chỉnh trong kiểm tra danh tính. Tiếp theo, đừng quên đặt định danh ô của bạn. Để thuận tiện, tốt nhất bạn nên sử dụng tên của lớp tùy chỉnh. Khi bạn kéo các kết nối của mình, thay vì kéo chúng vào Chủ sở hữu tệp, hãy kéo các kết nối của bạn vào chính ô tùy chỉnh.
Hầu hết những gì tôi đã tìm hiểu về các ô xem bảng tùy chỉnh đều xuất phát từ iOS Recipes công thức nấu ăn 15-16. Đây là số free extract trực tiếp từ The Pragmatic Bookshelf. Bạn có thể xem cuốn sách đó để biết thêm chi tiết.
EDIT:
cuối cùng tôi nhận được xung quanh để mở nguồn lớp RBSmartTableViewCell
tôi. Bạn có thể tìm thấy nó trên GitHub của tôi. Bạn sẽ thấy lớp này hữu ích hơn mã trực tiếp từ iOS Recipes, vì lớp của tôi xử lý tất cả các ô giống nhau, bất kể chúng được xây dựng bằng XIB, UIStoryboard hay mã. Repo này cũng bao gồm các mẫu làm việc.
Hoàn thành sidenote, bạn có thể chỉ cho tôi một số hướng dẫn hoặc mẫu làm thế nào bạn đang làm điều này bởi vì nó âm thanh tuyệt vời, hiện tại tôi phải lặp qua một ngòi để tìm xem thích hợp để sử dụng trong các tế bào tùy chỉnh của tôi. Đây không phải là lý tưởng. Và có vẻ như bạn có một giải pháp tuyệt vời. –
Bạn có thể xây dựng trên "nó chỉ dường như cho phép bạn đặt chủ sở hữu tệp cho một lớp đã biết, không phải là một id triển khai giao thức không?" Nó có nghĩa là người xây dựng giao diện? – rooftop
@rooftop có, "nó" đề cập đến Interface Builder trong trường hợp đó. Khi chỉnh sửa/định cấu hình đối tượng chủ sở hữu của tệp, có tùy chọn "Lớp" cho phép bạn chọn lớp của chủ sở hữu tệp. Hộp đó trong IB không cho phép tôi nhập id làm kiểu, và tôi tự hỏi nếu điều này là có thể. Cảm ơn! –
thauburger