gpt4 book ai didi

objective-c - 公共(public) View Controller 基类

转载 作者:IT王子 更新时间:2023-10-29 08:03:47 25 4
gpt4 key购买 nike

我想为我的项目创建一个 BaseViewController 类(继承自 UIViewController),它可以作为我项目中其他 View Controller 的基类。这是为了添加诸如通用进度 HUD、刷新按钮和网络更新机制之类的东西,也许还有一个可以由每个子类用文本自定义的错误对话框等。

至关重要的是,我希望能够将此功能添加到 UIViewController 子类和 UITableViewController 子类中,但我无法将自己插入到 UITableViewController 中 类层次结构,所以实际上我需要一个 BaseUIViewController 和一个 BaseUITableViewController,但如果我这样做,我必须实现两次更改并使它们保持同步。

如果要让 BaseViewController 子类和 BaseTableViewController 子类都可以访问公共(public)代码,最好的方法是什么?我只想在我的代码中有一个位置来处理常见任务。

1) 我考虑过使用 associative references 的类别,但这里的问题是我需要自定义实现 ViewController 生命周期类,例如 viewDidLoad:,这不是一个好主意。

2) 我可以完全跳过 UITableViewController,并从 BaseViewController 构建我自己的 BaseTableViewController,实现 tableView delegate & datasource 方法我自己,但我不太热衷于在这里跳过 apple 的 Controller 实现。

3) 我可以让 BaseViewController 继承自 UIViewControllerBaseTableViewController 继承自 UITableViewController,然后将自定义方法调用第三个文件 ViewControllerBaseMethods,可以从两个“基础”文件调用该文件。可能仍然存在重复的属性,但至少方法代码会在一个地方。

对于这种类型的事情还有其他好的方法吗?

最佳答案

UITableViewController 所做的就是提供一个 UITableView 属性,将自己声明为委托(delegate)和数据源,并将其 View 设置为 TableView

因此创建一个扩展 BaseViewController 的 BaseTableViewController,将其声明为 UITableViewDataSource 和 UITableViewDelegate 并实现所需的方法,添加 UITableView 属性并实现 loadView:

- (void)loadView
{
self.tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] andStyle:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.datasource = self;
self.view = self.tableView;
}

如果你想使用不同的表格 View 样式,你可以提供一个通用的方法或属性来在初始化时获取表格 View 样式

关于objective-c - 公共(public) View Controller 基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com