Đây là một giải pháp khác một chút.
Tôi đã phải sử dụng nó vì một số vấn đề về phân cấp khung nhìn mà tôi gặp phải: Tôi đang tạo một số chức năng yêu cầu chuyển các khung nhìn xung quanh đến các vị trí khác nhau trong hệ thống phân cấp khung nhìn, bị hỏng khi sử dụng chế độ xem bảng của UITableViewContaptor b / c bảngView là chế độ xem gốc của UITableViewControll ( self.view) và không chỉ là một chế độ xem thông thường, nó đã tạo ra các cấu trúc điều khiển / chế độ xem không nhất quán và gây ra sự cố.
Về cơ bản tạo lớp con UITableViewControll của riêng bạn và ghi đè loadView để gán self.view một khung nhìn khác và ghi đè lên thuộc tính tableView để trả về một chế độ xem bảng riêng biệt.
ví dụ:
@interface MyTableVC : UITableViewController
@end
@interface MyTableVC ()
@property (nonatomic, strong) UITableView *separateTableView;
@end
@implementation MyTableVC
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:CGRectZero];
}
- (UITableView *)tableView {
return self.separateTableView;
}
- (void)setTableView:(UITableView *)tableView {
self.separateTableView = tableView;
}
@end
Khi được kết hợp với giải pháp của Keller, điều này sẽ mạnh mẽ hơn theo nghĩa là Chế độ xem bảng bây giờ là chế độ xem thông thường, không phải là chế độ xem gốc của VC và mạnh mẽ hơn đối với việc thay đổi phân cấp chế độ xem. Ví dụ về việc sử dụng nó theo cách này:
MyTableVC *tableViewController = [[MyTableVC alloc] init];
tableViewController.tableView = self.myTableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;
Có một cách sử dụng khác có thể cho việc này:
Vì việc phân lớp theo cách này tách biệt self.view khỏi self.tableView, giờ đây có thể sử dụng UITableViewContaptor này như một bộ điều khiển thông thường và thêm các cuộc phỏng vấn khác vào self.view mà không có sự khác biệt khi thêm các cuộc phỏng vấn vào UITableView xem các bộ điều khiển trực tiếp một lớp con của UITableViewControll thay vì có các con UITableViewControll.
Một số điều cần chú ý:
Vì chúng ta ghi đè lên thuộc tính tableView mà không gọi siêu, có thể có một số điều cần chú ý và nên xử lý khi cần thiết. Ví dụ: đặt chế độ xem bảng trong ví dụ trên của tôi sẽ không thêm chế độ xem bảng vào self.view và không đặt khung mà bạn có thể muốn làm. Ngoài ra, trong triển khai này, không có bảngView mặc định nào được cung cấp cho bạn khi lớp được khởi tạo, đây cũng là thứ bạn có thể xem xét thêm. Tôi không bao gồm nó ở đây bởi vì đó là tùy từng trường hợp và giải pháp này thực sự phù hợp với giải pháp của Keller.