当控制器在 ViewDidLoad 添加子视图 懒加载 tableView 时,tableView 指针和 view.subViews 中的指针地址相同,但是在 viewWillAppear 方法中 tableView 指针地址发生改变,但是 view.subViews 仍然只有一个视图,此时移除 tableView,view.subViews 会为空,目前不清除是因为 pod 库导致的问题还是项目中第三方库导致的问题或者是 swift 在特定情形下的问题,但是问题还是必须解决,思路:直接刷新 view.subViews 中的表视图即可。
开始实现获取 tableView:
public func subTableView() -> UITableView?{
for e in self.subviews.enumerated() {
if let tableView = e.element as? UITableView {
return tableView
}
}
return nil
}
//然后:
subTableView()?.reloadData()
发现功能是实现了,但是代码有点丑,不够优雅,继而优化,最终实现如下:将
lazy var tableView: UITableView = {
let view: UITableView = UITableView.create(self.view.bounds, style: .grouped, rowHeight: 50)
view.dataSource = self
view.delegate = self
return view
}()
修改为:
lazy var tableView: UITableView = {
guard let tableView = view.subView(UITableView.self) as? UITableView else {
let view = UITableView.create(self.view.bounds, style: .plain, rowHeight: 50)
view.dataSource = self
view.delegate = self
return view
}
return tableView
}()
完美解决!
(开发中随着项目的越来越大,总会遇到各种各样的问题,你可以找不到原因,但你必须能解决问题,即使谷歌都搜不到这样的问题。)
网友评论