SplitView - 根据swift中更改的细节在master tableView中重新加载数据

时间:2016-09-18 07:36:48

标签: ios swift uisplitviewcontroller master-detail splitview

我在主视图中使用tableView创建splitView,在两个详细信息视图中使用静态单元创建tableView(参见图片)。 App Structure

视图控制器的名称是: DocsTableViewController - 主视图(左侧) DocDetailTableViewController - 详细视图(在右上角) DocEditTableViewControler - 第二个详细视图(在右下角)

Docs TVC是医生名单,DocDetailTVC是在DocsTVC中选择的医生用户的详细信息,DocEditTVC用户可以编辑DocDetailTVC中显示的医生数据或添加全新的医生(基于用户点击编辑或添加按钮)。

所有这些都很好 - 显示详细信息,显示编辑表单并保存已编辑或新的文档。问题是主表视图。我正在尝试在保存已编辑/新项目之后重新加载它,并且print我看到数据是重新加载但不是表格。表显示仍然相同,我必须转到相同的其他应用程序屏幕,然后返回查看重新加载的表视图。我该怎么办?

在DocEditTVC上保存医生后,我将回到这个方法的详细信息:

    @IBAction func saveToDocViewController (segue: UIStoryboardSegue){
    let controller = DocsTableViewController()
    controller.tableView.reloadData()
    print("[SPLIT VIEW] detail: \(controller.docs.count)")
}

来自DocsTableViewControler的一些代码(主视图):

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 = [NSForegroundColorAttributeName: UIColor.whiteColor()]

    // data load
    print("[SPLIT VIEW]: ViewDidLoad")
    dataLoad()
    self.tableView.reloadData()


    // split view
    self.splitViewController?.delegate = self
    self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
}

    func dataLoad() {
    print("[SPLIT VIEW]: DataLoad")
    let arrayOfDocIDs = PlistManager.sharedInstance.getArrayOfValuesFromDict("DocID") as [AnyObject] as! [String]

    for id in arrayOfDocIDs {
        docs.append(DocData(docID: id).docLoad(false))
    }
    print("[SPLIT VIEW] table: \(docs.count)")
}

通过这些print我看到那个晚上进展顺利 - 视图确实加载了主视图和文档数组写了新的计数。但是tableView没有改变。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

使用此代码

let controller = DocsTableViewController()
controller.tableView.reloadData()

您创建了新的主控制器实例,而不是当前的实例。 有两种方法可以解决它:

  1. 在详细控制器中,创建对当前主控制器的引用。

  2. 使用委托。这是一个很好的解释: https://www.natashatherobot.com/explaining-ios-delegates-a-story-about-your-morning-coffee/#

  3. 希望这有帮助!