在 UITableView 中的 UINib 中重新加载 UITableView

Posted

技术标签:

【中文标题】在 UITableView 中的 UINib 中重新加载 UITableView【英文标题】:reload UITableView in UINib which is in an UITableView 【发布时间】:2018-05-24 12:00:15 【问题描述】:

这个标题听起来有点令人困惑。

我有一个UITableView,我在其中实例化了一个UINib,其中包含一个UITableView。 这个 TableView 可以称之为“DetailTableView”,显示一些可以添加到另一个 ViewController 中的信息——到目前为止一切都很好。

我想要实现的是,这个“DetailTableView”在我添加一个新条目后会自动更新。

该条目保存在本地 Realm 数据库中并且已正确显示,但“DetailTableView”仅在我强制关闭并重新打开应用程序时更新。

我已经尝试重新加载UINib 并使用通知触发tableview.reloadData(),该通知在viewWillAppear() 中发布,但我无法让那个东西工作。 我也尝试开除instatiate:WithOwnerawakeFromNib(),但效果不佳。

我在网上搜索了很多,也在这里,但找不到任何答案,希望你们能帮助我。 多谢!

【问题讨论】:

你需要在这里使用领域通知realm.io/blog/realm-objc-swift-2-4 【参考方案1】:

你应该使用这个代码

data = try? realm.objects(Model.self)

token = data?.observe  (changes: RealmCollectionChange) in

                switch changes 
                case .initial:
                    self.tableView.reloadData()
                    break
                case .update:
                    self.tableView.reloadData()
                    break
                case let .error(error):
                    fatalError("\(error)")
                    break
                
            

【讨论】:

可以在其中添加条目的原始 tableView 正在更新,问题是,我有另一个 ViewController,其中有一个 UINib,在这个 UINib 中有一个填充了相同数据但经过过滤的 tableView UINib 中的 tableView 不会更新 - 仅当我重新打开应用程序时 因为它是一个 UINib 我已经这样做了: if let listView = Bundle.main.loadNibNamed("ListView", owner: self, options: nil)?.first as? Listview listView.tableview.reloadData() 但无论是这个还是其他都认为:listView.newNew.instantiate(withOwner: self, options: nil) listView.todoView.setNeedsDisplay() listView.todoView.setNeedsLayout() listView.awakeFromNib( ) ...工作。

以上是关于在 UITableView 中的 UINib 中重新加载 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UITableView 的顶部粘贴到 UISearchBar 的底部?

使用 UINib 为 UITableViewCell 分配插座

UINib (iOS):可以从一个 nib 文件中实例化多个视图吗?

生成自定义 UIView 的 UINib 实例给出“不符合键值编码”错误

在我告诉他启动之前,不应启动 UINib 文件

持久化 UINib 数组