use*_*902 3 uitableview uiviewcontroller ios swift
我有五个视图控制器,它们都继承自一个基本视图控制器。我的 baseVC 包含共享功能,例如启动或停止活动标识符或检查互联网活动。VC 如下所示
class BaseVC: UIViewController { }
class NewsFeedVC: BaseViewController { }
class MakePostVC: BaseViewController { }
class NotificationVC: BaseViewController { }
class MoreVC: BaseViewController { }
class CollectionVC: BaseViewController { }
Run Code Online (Sandbox Code Playgroud)
我的 NewsFeedVC 和 NotificaitionVC(来自故事板)是由普通的 UIViewController 构建的,tableView 拖进来了。所以这一切都有效。但是,我正在考虑将故事板中的这两个 VC 更改为 UITableViewController 而不是将 tableView 拖到 viewController 中。这样做的原因是因为如果 tableView 是在 UIViewcontroller 中构造的,则在 pull to refresh 周围存在一些错误导致 tableView 跳转。
但是,如果 NewsFeedVC 和 NotificationVC 像下面这样从 UItableViewController 继承,我将无法再使用 BaseVC 中的功能。我该如何构建它以实现我的愿望?
class NewsFeedVC: UITableViewController { }
class MakePostVC: UITableViewController { }
Run Code Online (Sandbox Code Playgroud)
在您BaseViewController希望NewsFeedVC类继承的函数中设置协议,然后使用委托调用它们
在您的BaseVC 中添加以下内容:-
prtotocol baseVCDelegate{
func activityIndic()
func checkInternetConnect()
}
class BaseVC : UIViewController{
....
var delegate : baseVCDelegate!
....
..
func activityIndic(){
..
..
}
..
func checkInternetConnect(){
..
..
}
}
Run Code Online (Sandbox Code Playgroud)
在你NewsFeedVC声明一个类型的变量BaseVC
var baseVCHandler : BaseVC = BaseVC()
Run Code Online (Sandbox Code Playgroud)
将其委托分配给 self viewDidLoad()
baseVCHandler.delegate = self
Run Code Online (Sandbox Code Playgroud)
然后访问您的协议符合的任何功能!
PS:-通过这个https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem,可能会帮助你理解为什么 swift 不喜欢类的钝多重继承背后的原因,会清除你的基础知识。
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |