我在NavigationController中嵌入了一个TableView(并且它嵌入在TabBar控制器中)。我在每个单元格中都有一个用户名按钮,该按钮位于用户的个人资料中。
然而,当我在个人资料页面的导航栏上点击“返回”并被定向回到tableview后,似乎我发现了一些错误。
如果我再次下拉,它会刷新,但这一次,顶行的用户名变得不可点击而其他行按预期工作。
请注意,我在tableView中的self.theRefreshControl = UIRefreshControl()
中调用了viewDidLoad
,但在使用“返回”按钮后,我不确定是否正在调用它。
请注意,我使用prepareForSegue
执行segue。
结束
如果我转到通知页面并尝试点击用户名,请点击用户名按钮,然后点击工作
如果我转到通知并提取刷新,则第一行中的用户名按钮不起作用
如果我转到通知并且不进行任何刷新,则用户名按钮会分段并返回工作(因此它不会产生错误)。
如果我转到通知并拉动刷新,则refreshControl图标会出现并消失,但现在,它不允许我点击顶行的用户名按钮。
如果我刷新通知,则不允许我点击顶行的用户名。如果我点击第二个单元格中的第二个用户名,它会转到用户的个人资料,但当我点击后退按钮时,它就会出现如下错误:
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
,但遗憾的是没有运气
答案 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
时,它会自动发生