使用Back on NavBar后,RefreshControl首先在TableView的Cell中出错

时间:2016-02-14 11:30:23

标签: ios swift uitableview pull-to-refresh

我在NavigationController中嵌入了一个TableView(并且它嵌入在TabBar控制器中)。我在每个单元格中都有一个用户名按钮,该按钮位于用户的个人资料中。

enter image description here

然而,当我在个人资料页面的导航栏上点击“返回”并被定向回到tableview后,似乎我发现了一些错误。

enter image description here

enter image description here

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

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

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

结束

  • 如果我转到通知页面并尝试点击用户名,请点击用户名按钮,然后点击工作

  • 如果我转到通知并提取刷新,则第一行中的用户名按钮不起作用

  • 如果我转到通知并且不进行任何刷新,则用户名按钮会分段并返回工作(因此它不会产生错误)。

  • 如果我转到通知并拉动刷新,则refreshControl图标会出现并消失,但现在,它不允许我点击顶行的用户名按钮。

  • 如果我刷新通知,则不允许我点击顶行的用户名。如果我点击第二个单元格中的第二个用户名,它会转到用户的个人资料,但当我点击后退按钮时,它就会出现如下错误:

enter image description here

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.backgroundView = refreshControl上方和下方添加self.tableView.addSubview(theRefreshControl);并尝试用self.tableView.addSubview(theRefreshControl)替换self.tableView.backgroundView = refreshControl,但遗憾的是没有运气

1 个答案:

答案 0 :(得分:5)

你应该实例化refreshControl的方式如下:

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

this answer中所述。

我的猜测是你的refreshControl在你的单元格前面,所以如果上述方法不起作用,请试试tableView.sendSubviewToBack(theRefreshControl)中的viewDidLoad

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