即使不将其添加为子视图,设置为 TableViewController 的刷新控件也可以工作

Posted

技术标签:

【中文标题】即使不将其添加为子视图,设置为 TableViewController 的刷新控件也可以工作【英文标题】:Refresh Control set to TableViewController works even without adding it as Sub View 【发布时间】:2017-08-14 08:07:10 【问题描述】:

在下面的代码中,创建了一个 TableViewController 并设置了它的 tableView 和 refreshControl 属性。然而,即使没有将 TableViewController 作为子视图添加到 View Controller 视图,刷新控件也会开始工作。好奇这是怎么发生的吗?

@IBOutlet weak var dashBoardTableView: UITableView!

let refreshControl = UIRefreshControl()

func configureRefreshControl()

    refreshControl.addTarget(self, action: #selector(self.pullToRefresh)  , for: .valueChanged)
    //UIRefreshControl will not work properly without embedding it in a UITableViewController
    let tableViewContainerVC = UITableViewController()
    tableViewContainerVC.tableView = dashBoardTableView
    tableViewContainerVC.refreshControl = refreshControl

【问题讨论】:

为什么要初始化另一个UITableViewController?如果你这样做就足够了dashBoardTableView.refreshControl = refreshControl @kchromik dashBoardTableView 是 UITableView 的子类,它没有 refreshControl 属性。 【参考方案1】:

很有可能苹果开发者在 UITableViewController 中做了这样的事情:

var refreshControl:UIRefreshControl 
    didSet
        //......
        self.tableView.tableHeaderView?.addSubview(refreshControl)
        //......
    

所以 RefreshController 紧随其后:tableViewContainerVC.refreshControl = refreshControl

【讨论】:

以上是关于即使不将其添加为子视图,设置为 TableViewController 的刷新控件也可以工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥将按钮添加为子视图时会出现内存泄漏?

如何在不将其添加到子视图的情况下截取 uiview?

UIView:将 UIViewController 的视图添加为子视图并将其删除

ViewController 添加为子视图太​​快发布

tableView.tableHeaderView 已设置但未绘制

添加为子视图的 NSView 不显示