在 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 视图以连接
view
和 tableView
插座
- ctrl-从table视图拖动到视图控制器以设置
delegate
和dataSource
插座。
完成 - 不需要魔法。
我有很多 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 视图以连接
view
和tableView
插座 - ctrl-从table视图拖动到视图控制器以设置
delegate
和dataSource
插座。
完成 - 不需要魔法。