• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - SplitView - 根据在 swift 中更改的详细信息重新加载主 tableView 中的数据

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:32:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

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

在 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,我看到那天晚上进展顺利 - View 确实加载到主视图上,并且文档数组写入了新计数。但是 tableView 没有改变。感谢您的帮助。



Best Answer-推荐答案


使用此代码

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

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

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

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

希望对您有所帮助!

关于ios - SplitView - 根据在 swift 中更改的详细信息重新加载主 tableView 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555223/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap