关于iOS多继承的问题
黄舟
黄舟 2017-04-17 14:51:56
[iOS讨论组]

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(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就行了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号