Objective C中如何通过代码或Storyboard关联自定义UITableViewController与UITableView
该场景完全可行,这种拆分逻辑的方案符合单一职责设计原则,可以有效避免主UIViewController代码过于臃肿。
实现方式分为代码和Storyboard两种:
1. 代码实现
- 第一步:在主UIViewController的头文件中声明自定义UITableViewController子类的强引用属性:
@property (nonatomic, strong) CustomTableViewController *customTableVC;
- 第二步:在主VC的
viewDidLoad生命周期方法中完成关联逻辑:
- (void)viewDidLoad { [super viewDidLoad]; // 初始化自定义TableViewController self.customTableVC = [[CustomTableViewController alloc] initWithStyle:UITableViewStylePlain]; // 配置tableView尺寸,也可根据需求使用AutoLayout约束 self.customTableVC.tableView.frame = self.targetContainerView.bounds; self.customTableVC.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; // 将tableView添加到预设的容器UIView上 [self.targetContainerView addSubview:self.customTableVC.tableView]; // 关键步骤:将自定义TableVC作为子控制器添加到主VC,避免生命周期、响应链异常 [self addChildViewController:self.customTableVC]; [self.customTableVC didMoveToParentViewController:self]; }
- 后续所有UITableView的数据源、代理逻辑都直接写在
CustomTableViewController子类中即可,无需主VC参与。
2. Storyboard实现
- 第一步:打开主VC对应的Storyboard,从控件库拖拽一个
Container View到你原本要放置UITableView的UIView位置,给Container View添加好对应约束。 - 第二步:Container View默认会生成一个关联的子ViewController,选中该子VC,打开Identity检查器,将Class修改为你自定义的UITableViewController子类;再打开Attribute检查器,调整Table View的样式为你需要的Plain/Grouped即可。
- 如果你的自定义UITableViewController已经提前创建在Storyboard中,可以删除Container View默认生成的子VC,按住Control从Container View拖拽到你已有的自定义TableVC,选择
embedSegue即可完成关联。
内容的提问来源于stack exchange,提问作者stefanosn
相关产品推荐
相关产品推荐

