自定義 CategoryTableView 繼承 UIView,內部包含 UITableView。作為子視圖添加到 HomeViewController 中。需要在 didSelectRowAtIndexPath 中 push 新控制器,但 UIView 沒有導航控制器引用。
@property (nonatomic, weak) UIViewController *parentViewController;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// 通過父控制器訪問導航控制器
[self.parentViewController.navigationController pushViewController:detailVC animated:YES];
// 或模態彈出
// [self.parentViewController presentViewController:detailVC animated:YES completion:nil];
}
// HomeViewController.m
CategoryTableView *tblView = [[CategoryTableView alloc] init];
tblView.parentViewController = self; // 設置弱引用
[self.view addSubview:tblView];
定義協議 CategoryTableViewDelegate,父控制器實現協議並作為代理,更解耦。
UIView 子類需持有父 UIViewController 的弱引用(或代理)才能訪問導航控制器進行頁面跳轉。