在 objective c 中为不同的视图控制器提供通用功能

providing common functionality for different viewcontrollers in objective c

我有很多 viewcontrollers 需要一些与导航相关的通用功能。

早些时候我制作了一个基础 class BaseViewController(扩展 UIViewController),它具有所有通用功能(比如在 viewDidLoad 上执行一些任务等)和我所有的 viewcontrollers 扩展 BaseViewController.

问题是我的一些 viewcontroller 应该是 UIViewController 的子 class 和一些 UITableViewController,所以我不能使用上面的方法。

一种方法是为两者编写基础 class 和复制代码。有没有更好的不重复代码的方法呢

虽然您可以通过使用委托或辅助对象来解决这个问题,但我会提出不使用 UITableViewController 的情况。它只是 UIViewController 之上的一个非常轻量级的子 class,提供 table 视图,符合委托和数据源协议,并为 属性 添加一两个选择并刷新。

虽然我通常不会建议重新创建框架已经为您完成的事情,但如果您只保留从公共基础继承的所有内容,它可能(在您的情况下)使您的代码更容易理解 class 并将 table 视图添加到子 class 之一。

如果您确实认为这是一种合理的方法,UITableViewController documentation 概述详细描述了这些行为的具体实施方式和位置,因此模仿其确切设置是微不足道的。

将 table 视图添加到 UIViewController

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) IBOutlet UITableView *tableView;
@end

在您的情节提要中,从对象库中拖出一个“Table 视图”并将其放在文档大纲中视图控制器场景的“视图”之上 - 这将替换 带有 UITableView.

的根视图

然后连接起来:

  • ctrl-从视图控制器拖动到 table 视图以连接 viewtableView 插座
  • ctrl-从table视图拖动到视图控制器以设置delegatedataSource插座。

完成 - 不需要魔法。