在 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:WithOwner
或awakeFromNib()
,但效果不佳。
我在网上搜索了很多,也在这里,但找不到任何答案,希望你们能帮助我。 多谢!
【问题讨论】:
你需要在这里使用领域通知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 文件中实例化多个视图吗?