【发布时间】:2017-02-12 20:31:37
【问题描述】:
对于我的应用,我需要多次推送相同的 TableViewController。当用户点击 didSelect 时,我需要在导航堆栈中推送相同的控制器。
我的应用程序是文件管理器应用程序,它连接到 ftp 服务器并向用户显示里面的内容。但是文件夹中可能有包含更多文件夹(无限)的文件夹。
为此,我无法在情节提要中创建大量 TableViewController,并且当我尝试将同一控制器推入导航堆栈时:
navigationController?.pushViewController(self, animated: true)
我收到错误消息,说我无法在导航堆栈中推送相同的控制器。 所以我创建了我的控制器的新实例并尝试像这样推送:
let newMyTableVC = MyTableVC()
navigationController?.pushViewController(newMyTableVC, animated: true)
但是有了这个我也得到错误说:
'无法将标识符为 FolderCell 的单元格出列 - 必须为标识符注册一个 nib 或类或连接情节提要中的原型单元格'
所以我从这个错误中了解到我的第一个 TableViewController 使用了我的单元格标识符并且它在内存中。当我尝试传递具有相同单元格标识符的 TableViewController 的新实例时,它会崩溃,因为单元格已经存在具有相同的标识符。(我可能错了)。
If i am on right track doing this with approach at the above {
How do i reuse cells with dynamic identifier and provide data to them.
} else {
How do i accomplish what i want?
}
感谢您的宝贵时间。
【问题讨论】:
-
为什么每次都创建一个新的控制器,而不是仅仅更改数据集以匹配当前目录的数据集?然后使用 TableView 的 reloadData() 功能?
-
这是一个非常好的方法。给 table view controller 一个 storyboard id,并用 self.storyboard instantiateViewControllerWithId 实例化。
-
大家好,感谢您的回复。我每次都需要创建新的控制器,因为我希望用户能够从缓存中的最后一个文件夹视图控制器返回,而无需等待新的网络请求和重新加载 tableView。此外,当用户点击单元格并重新加载数据而不是将新视图控制器推入导航堆栈时,这也是糟糕的用户体验。
标签: ios objective-c swift uitableview uinavigationcontroller