我到处都在寻找这个问题,但找不到答案。

因此,在我的应用程序的第一页上,我在导航控制器中有一个页面。该页面内是一个表格视图。在表格的单元格中,有一个按钮。对于单元格的视图控制器,我说如果用户未登录,请从超级视图中删除按钮。因此,当您首次加载应用程序时,没有按钮。

现在,如果单击登录按钮(页面顶部的按钮),它将转到该页面,那么可能会发生两种情况。起初,我正在做的事情是回到主页。一切正常。该按钮出现在单元格中。

但是我不喜欢如何将主页的第二个副本添加到导航控制器堆栈中。因此,我现在所探索的是popnavigationcontroller方法和unsegue segue。因此它们都可以工作,但是问题在于,当它退回到新页面时,即使前面提到的按钮应该在用户登录后出现,我前面提到的按钮也不会出现在单元格中。其原因是因为方法“ dequeueReusuableCell”使用的是旧单元格,其中我已删除了该按钮。现在,按钮已被删除,对于我而言,没有简单的方法可以将其重新添加到视图中的正确位置。

那么,这里最好的解决方案是什么?最初,我在寻找一种方法来“清除” tableView的所有可重用单元格,但是我不确定是否找到了答案。我想做的是,当我倒回到导航控制器时,像第一次看到它一样刷新所有内容。

我猜我可以做的另一种解决方案是从登录页面到主页执行正常的搜索,然后删除以前的冗余主导航控制器。有更好的解决方案吗?

最佳答案

当您的控制器弹出堆栈时,基础视图控制器将调用其viewDidAppear(animated:)函数。因此,您可以:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}


根据您的帖子,这是假定问题仅与重新加载表有关。如果重新加载表,并且单元仍未正确更新,则您的dataSource不能正确配置单元会遇到问题。但是我无法确定是否没有任何代码就是这种情况。

编辑:这是一个单元重用问题。单元配置中有一些代码可以在某些情况下删除子视图,但是如果应该在子视图中,则永远不要将其添加回去。最简单的解决方法是使用isHidden而不是直接删除子视图。

关于ios - 解散segue,需要刷新tableview,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45196552/

10-11 22:17
查看更多