Ios 展开序列,需要刷新tableview

Ios 展开序列,需要刷新tableview,ios,Ios,我已经找遍了这个问题,找不到答案 因此,在我的应用程序的第一页,我在导航控制器中有一个页面。该页面中有一个tableview。在表格的单元格中,有一个按钮。对于单元格的视图控制器,如果用户未登录,我建议从superview中删除按钮。因此,当你第一次加载应用程序时,没有按钮 现在,如果您单击登录按钮(页面顶部的按钮),它将转到该页面,那么可能会发生两种情况。起初,我所做的是继续回到主页。一切都很顺利。该按钮出现在单元格中 但我不喜欢主页的第二个副本被添加到导航控制器堆栈中。所以我现在探索的是po

我已经找遍了这个问题,找不到答案

因此,在我的应用程序的第一页,我在导航控制器中有一个页面。该页面中有一个tableview。在表格的单元格中,有一个按钮。对于单元格的视图控制器,如果用户未登录,我建议从superview中删除按钮。因此,当你第一次加载应用程序时,没有按钮

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

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

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


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

当控制器从堆栈中弹出时,底层视图控制器将调用其
视图显示(动画:)
函数。所以你可以:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}
这是基于您的帖子假设问题只是关于重新加载表。如果重新加载表,并且单元格仍没有正确更新,则说明数据源的
配置不正确。但如果没有任何代码,我无法判断情况是否如此


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

当控制器从堆栈中弹出时,基础视图控制器将调用其
视图显示(动画:)
函数。所以你可以:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}
这是基于您的帖子假设问题只是关于重新加载表。如果重新加载表,并且单元格仍没有正确更新,则说明数据源的
配置不正确。但如果没有任何代码,我无法判断情况是否如此


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

我也尝试过这样做,只是忘了提一下。我通过在各处放置print语句来测试单元格是否正确更新,但问题是,它正在重用单元格,我已经在其中删除了按钮。我不想将按钮添加到视图中,因为我不知道如何在代码中进行自动布局等操作。我已经在情节提要中默认添加了按钮。这有意义吗?当我做一个正常的segue时,一切正常,因为按钮没有被移除。当单元格第一次加载时,默认情况下该按钮位于该位置。如果需要,请尝试将按钮上的
isHidden
设置为
true
false
,而不是移除该按钮。您通常有一些函数来配置
cellforrowatinexpath
中的单元格,是吗?因为单元格是重复使用的,所以您始终需要处理正在进行的任何单元格操作的两面。添加/删除子视图、显示/隐藏子视图、更改字体/将其更改回来等等。是的,你是对的,我应该使用isHidden。我刚试过,一切都很好。非常感谢。我不知道这是否重要,但如果你把你的答案放在它自己的另一个线程中,我会把它标记为正确的。我也试过这样做,只是忘了提到它。我通过在各处放置print语句来测试单元格是否正确更新,但问题是,它正在重用单元格,我已经在其中删除了按钮。我不想将按钮添加到视图中,因为我不知道如何在代码中进行自动布局等操作。我已经在情节提要中默认添加了按钮。这有意义吗?当我做一个正常的segue时,一切正常,因为按钮没有被移除。当单元格第一次加载时,默认情况下该按钮位于该位置。如果需要,请尝试将按钮上的
isHidden
设置为
true
false
,而不是移除该按钮。您通常有一些函数来配置
cellforrowatinexpath
中的单元格,是吗?因为单元格是重复使用的,所以您始终需要处理正在进行的任何单元格操作的两面。添加/删除子视图、显示/隐藏子视图、更改字体/将其更改回来等等。是的,你是对的,我应该使用isHidden。我刚试过,一切都很好。非常感谢。我不知道这是否重要,但如果你把答案放在自己的另一个线程中,我会更正它。不要从单元格中“删除”按钮,只需设置
button.ishiden=true
,然后