关于iOS多继承的问题

如题, 在项目中,有一个基类BaseViewController 继承于系统的UIViewController,然后我的controller都继承于BaseViewController, 但是我项目中还有很多UITableViewController,怎么让TableViewController也拥有BaseViewController中的方法..

阅读 7.1k
6 个回答

建一个BaseTableViewController继承与BaseViewController.在BaseTableViewController中声明一个属性UITableView,配好tableView的基本属性了就行了。然后你用UITableViewController时,就再建一个VC继承与BaseTableViewController就行了。

利用Runtime方法在UIViewController上添加需要的属性和方法,重写方法用保存后替换的方式实现。

但要考虑到是否有不能继承这些修改的类,比如UINavigationController。

用类别的方式,给UIViewController加方法
如果用重构,想了想比较麻烦,需要抽提一个中介类,然后BaseViewController和BaseTableViewController需要一个中介对象进行调用。麻烦之处在于要把方法和成员提出去,并且原来代码里所有的self,替换成self.xxx以访问原来的self指针。

IOS不支持多继承,但是支持多个代理,楼主可以在BaseViewController设置一个Delegate,然后UITableViewController去引用好了。

建议可以不用UITableViewController:)实际工程中,感觉没有什么优势……

一般的做法是给UIViewController里面 addSubView 加一个UITableViewdelegatedataSource设成self就行了。

你可以试试直接把你的UITableViewController改成BaseNameController,之前写好的代码都不用动~

新手上路,请多包涵

UIViewController实现了UITableViewDataSourceUITableViewDelegate协议以后就和UITableViewController没什么区别。

让你自己的VC继承BaseViewController,实现这两个协议,再把你的UITableViewdelegatedataSource都设为这个VC就行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题