ios - SplitView - 根据在 swift 中更改的详细信息重新加载主 tableView 中的数据
<p><p>我在主视图中使用 tableView 创建 splitView,在两个详细 View 中使用静态单元格创建 tableView(参见图片)。
<a href="http://i.stack.imgur.com/CstAK.png" rel="noreferrer noopener nofollow">App Structure</a> </p>
<p> ViewController 的名称是:
DocsTableViewController - 主视图(左侧)
DocDetailTableViewController - 详细 View (右上角)
DocEditTableViewControler - 第二个详细 View (右下角)</p>
<p>DocsTVC 是医生列表,DocDetailTVC 是在 DocsTVC 中选择的医生用户的详细信息,在 DocEditTVC 上用户可以编辑 DocDetailTVC 中显示的医生数据或添加全新的数据(基于用户单击编辑或添加按钮)。</p>
<p>所有这些都运行良好 - 显示详细信息、显示编辑表单并保存已编辑或新文档。问题是主 TableView 。我试图在保存编辑/新项目后详细重新加载它,通过 <code>print</code> 我看到数据被重新加载但不是表格。表格显示仍然相同,我必须转到应用程序的同一其他屏幕,然后返回查看重新加载的表格 View 。我该怎么办?</p>
<p>在 DocEditTVC 上保存医生后,我将回到这个方法的细节:</p>
<pre><code> @IBAction func saveToDocViewController (segue: UIStoryboardSegue){
let controller = DocsTableViewController()
controller.tableView.reloadData()
print(" detail: \(controller.docs.count)")
}
</code></pre>
<p>还有一些来自 DocsTableViewControler(主视图)的代码:</p>
<pre><code>override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
// menu
if inputsMenuButton != nil {
inputsMenuButton.target=self.revealViewController()
inputsMenuButton.action=#selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
// navigation bar
self.navigationController?.navigationBar.barTintColor = OAKScolor().colorOAKSmain()
self.navigationController?.navigationBar.titleTextAttributes =
// data load
print(": ViewDidLoad")
dataLoad()
self.tableView.reloadData()
// split view
self.splitViewController?.delegate = self
self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
}
</code></pre>
<p>和</p>
<pre><code> func dataLoad() {
print(": DataLoad")
let arrayOfDocIDs = PlistManager.sharedInstance.getArrayOfValuesFromDict("DocID") as as!
for id in arrayOfDocIDs {
docs.append(DocData(docID: id).docLoad(false))
}
print(" table: \(docs.count)")
}
</code></pre>
<p>通过这些 <code>print</code>,我看到那天晚上进展顺利 -View 确实加载到主视图上,并且文档数组写入了新计数。但是 tableView 没有改变。感谢您的帮助。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>使用此代码</p>
<pre><code>let controller = DocsTableViewController()
controller.tableView.reloadData()
</code></pre>
<p>您创建了新的主 Controller 实例,而不是当前的。
有两种方法可以解决:</p>
<ol>
<li><p>在详细 Controller 中,创建对当前主 Controller 的引用。</p></li>
<li><p>使用委托(delegate)。这是一个很好的解释:
<a href="https://www.natashatherobot.com/explaining-ios-delegates-a-story-about-your-morning-coffee/#" rel="noreferrer noopener nofollow">https://www.natashatherobot.com/explaining-ios-delegates-a-story-about-your-morning-coffee/#</a> </p></li>
</ol>
<p>希望对您有所帮助!</p></p>
<p style="font-size: 20px;">关于ios - SplitView - 根据在 swift 中更改的详细信息重新加载主 tableView 中的数据,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/39555223/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/39555223/
</a>
</p>
页:
[1]