在 NavBar 上使用 Back 后,RefreshControl 对 TableView 的第一个单元格产生错误
Posted
技术标签:
【中文标题】在 NavBar 上使用 Back 后,RefreshControl 对 TableView 的第一个单元格产生错误【英文标题】:RefreshControl bugs first Cell of TableView, after using Back on NavBar 【发布时间】:2016-02-14 11:30:22 【问题描述】:我在 NavigationController 中嵌入了一个 TableView(并且它嵌入在 TabBar 控制器中)。我在每个单元格中都有一个用户名按钮,用于连接用户的个人资料。
但是,当我在个人资料页面的导航栏上点击“返回”并被引导回 tableview 后,我似乎发现了什么问题。
如果我再次下拉,它会刷新,但这一次,顶行的用户名变得不可点击,而其他行按预期工作。
请注意,我在 tableView 中的 viewDidLoad
中调用了 self.theRefreshControl = UIRefreshControl()
,但在使用后退按钮后我不确定它是否被调用。
请注意,我使用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.addSubview(theRefreshControl)
上方和下方添加self.tableView.backgroundView = refreshControl
;并尝试用self.tableView.backgroundView = refreshControl
替换self.tableView.addSubview(theRefreshControl)
,但不幸的是没有运气
【问题讨论】:
在segue之前工作正常吗? 是的,用户名按钮在 segue 之前可以正常工作。我刚刚意识到,如果我转到该页面,并且不拉刷新,它工作正常。但是,一旦我下拉(所以触发刷新),然后它无法在用户名按钮单击时再次执行 segue。 ***.com/questions/24475792/… @Maheshreddy 我对this answer provided 所做的完全一样。我还让刷新控件在另一个页面上工作,该页面正在工作。我正在尝试在这里做同样的事情,但无法正常工作。 我的猜测是您的 refreshControl 在您的单元格前面,所以最后尝试一下:tableView.sendSubviewToBack(theRefreshControl)
in viewDidLoad
【参考方案1】:
你应该实例化 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
时,它应该会自动发生
【讨论】:
我的看起来和这个很相似,除了tableView.backgroundView = refreshControl
这一行。 (请检查我更新的答案,我刚刚在 ViewDidLoad 中添加了我的代码)。我尝试在self.tableView.addSubview(theRefreshControl)
之前和之后添加tableView.backgroundView = refreshControl
,但不幸的是,没有运气
您必须删除self.tableView.addSubview:
。另外,你打电话给endRefreshing:
吗?
是的,我在打电话。 self.theRefreshControl.endRefreshing()
。我在问题中添加我的代码。等一下。
非常感谢您的宝贵时间!!这个sendSubviewToBack
解决了我的问题。所以我使用了tableView.addSubview(theRefreshControl)
和tableView.sendSubviewToBack(theRefreshControl)
。我没有使用tableView.backgroundView = refreshControl
。 @Quan~,再次,非常感谢。当它让我在 23 小时内时,我会接受赏金.. XoXo
没问题,总是很开心! :)以上是关于在 NavBar 上使用 Back 后,RefreshControl 对 TableView 的第一个单元格产生错误的主要内容,如果未能解决你的问题,请参考以下文章
uniapp小程序中修改Vant组件navbar左箭头的颜色及图标与背景