美文网首页
Swift 偶发诡异问题解决:控制器子视图指针地址改变

Swift 偶发诡异问题解决:控制器子视图指针地址改变

作者: SoaringHeart | 来源:发表于2020-05-17 13:36 被阅读0次

    当控制器在 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
    }()
    

    完美解决!
    (开发中随着项目的越来越大,总会遇到各种各样的问题,你可以找不到原因,但你必须能解决问题,即使谷歌都搜不到这样的问题。)

    相关文章

      网友评论

          本文标题:Swift 偶发诡异问题解决:控制器子视图指针地址改变

          本文链接:https://www.haomeiwen.com/subject/yqtsohtx.html