我已经查看了这个问题,我找不到答案。
所以在我的应用程序的第一页上,我在导航控制器中有一个页面。在该页面内是一个tableview。在桌子的单元格内,有一个按钮。对于单元格的视图控制器,我说如果用户未登录则从superview中删除该按钮。因此,当您第一次加载应用程序时,没有按钮。
现在,如果您单击登录按钮(页面顶部的按钮),它将转到该页面,然后可能发生两种可能的事情。起初我正在做的是将segue回到主页面。一切都很好。按钮出现在单元格中。
但我不喜欢如何将主页的第二个副本添加到导航控制器堆栈中。所以我现在探讨的是popnavigationcontroller方法和unwind segue。所以他们都工作但问题是当它退回到新页面时,我前面提到的按钮没有出现在单元格中,即使它应该在用户登录后出现。原因是因为该方法" dequeueReusuableCell"正在使用旧单元格,我已经删除了按钮。现在按钮被移除了,我没有简单的方法将它重新添加到视图中的正确位置。
那么这里最好的解决方案是什么?起初我正在寻找一种方法来清除" tableView的所有reusuablecells,但我不确定我是否找到了答案。我想要做的是当我回到那个导航控制器时,刷新所有东西,就像它第一次看到它一样。
我想我能做的另一个解决方案是从登录页面到主页面执行正常的segue,然后删除以前的冗余主导航控制器。有更好的解决方案吗?
答案 0 :(得分:1)
当控制器弹出堆栈时,底层视图控制器将调用其viewDidAppear(animated:)
函数。所以你可以:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
tableView.reloadData()
}
根据您的帖子假设该问题仅关于重新加载您的表格。如果您重新加载表格并且您的单元格仍未正确更新,则表明您的dataSource
未正确配置单元格存在问题。但我无法判断是否存在没有任何代码的情况。
编辑:这是一个细胞重用问题。在某些情况下,单元格配置有一些代码可以删除子视图,但如果它应该在那里,则永远不会添加子视图。最简单的解决方法是使用isHidden
而不是直接删除子视图。