在 NavBar 上使用 Back 后,RefreshControl 会导致 TableView 的第一个 Cell 出错

RefreshControl bugs first Cell of TableView, after using Back on NavBar

我在 NavigationController 中嵌入了一个 TableView(并且嵌入在 TabBar 控制器中)。我在每个单元格中都有一个用户名按钮,可以连接到用户的个人资料。

然而,在我点击个人资料页面的导航栏上的 'back' 并返回到 tableview 之后,我好像遇到了什么问题。

如果我再次下拉,它会刷新,但这次,顶行的用户名变得不可点击,而其他行按预期工作。

请注意,我在 tableView 的 viewDidLoad 中调用了 self.theRefreshControl = UIRefreshControl(),但我不确定在使用“后退”按钮后它是否被调用。

请注意,我使用 prepareForSegue 执行 segue。


总结

ViewDidLoad()中的代码:

 override func viewDidLoad() {
  super.viewDidLoad()

  self.theRefreshControl = UIRefreshControl()
  self.theRefreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
  self.theRefreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
  self.tableView.addSubview(theRefreshControl)
}

func refresh(sender: AnyObject) {
   if isFirstLoad == false {
      currentPage = 1
       getStuff()
    }

   self.theRefreshControl.endRefreshing()
}

我也试过在self.tableView.addSubview(theRefreshControl)上方和下方添加self.tableView.backgroundView = refreshControl;还尝试用 self.tableView.backgroundView = refreshControl 替换 self.tableView.addSubview(theRefreshControl) 但不幸的是没有运气

实例化 refreshControl 的方式如下:

override func viewDidLoad() {
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
    tableView.backgroundView = refreshControl // <- THIS!!!
}

this answer所述。

我猜你的 refreshControl 在你的单元格前面,所以如果上面的方法不起作用试试这个:tableView.sendSubviewToBack(theRefreshControl) in viewDidLoad

编辑:由于 tableView.sendSubviewToBack(theRefreshControl) 是解决方案,请考虑向 Apple 提交错误,因为当您将 refreshControl 设置为tableView.backgroundView