Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问主机';在iOS中从细节视图中删除tableview_Ios_Swift_Uitableview_Core Data - Fatal编程技术网

如何访问主机';在iOS中从细节视图中删除tableview

如何访问主机';在iOS中从细节视图中删除tableview,ios,swift,uitableview,core-data,Ios,Swift,Uitableview,Core Data,我的应用程序的一部分有一个嵌入的主细节部分。每个局部视图都使用自定义的UIViewController。当我更改其中一个UIViewController中某些内容的值时,我需要能够灰显主UITableViewController中的一个表行 我见过的最接近解决方案是使用NSNotificationCenter来冒泡任何更改,尽管这感觉有点不整洁 另一个解决方案是使用代理?但是我还没有遇到任何关于如何在Swift中使用它的示例解决方案或教程 我还尝试通过导航备份层次结构来访问表视图: let

我的应用程序的一部分有一个嵌入的主细节部分。每个局部视图都使用自定义的
UIViewController
。当我更改其中一个UIViewController中某些内容的值时,我需要能够灰显主
UITableViewController
中的一个表行

我见过的最接近解决方案是使用
NSNotificationCenter
来冒泡任何更改,尽管这感觉有点不整洁

另一个解决方案是使用代理?但是我还没有遇到任何关于如何在
Swift
中使用它的示例解决方案或教程

我还尝试通过导航备份层次结构来访问表视图:

   let navController = self.splitViewController!.viewControllers[0];

   navController.tableView.reloadData()
我知道上面的例子是错误的,但我不知道如何以这种方式访问主视图,甚至不知道它是否是正确的方法


哦,我试图调用
reloadData()
,因为在主视图中有一些逻辑检查是否可以灰显表行(我正在使用
核心数据)

因为我可以访问我的viewController,所以我可以像这样访问父viewController:

 func reloadMasterTableView(){
        let navVC: UINavigationController =  self.splitViewController!.viewControllers[0] as! UINavigationController


        let sectionsVC : UIMasterViewController = navVC.topViewController as! UIMasterViewController
        sectionsVC.tableView.reloadData()

    }

因为我可以访问我的viewController,所以我可以访问父viewController,如下所示:

 func reloadMasterTableView(){
        let navVC: UINavigationController =  self.splitViewController!.viewControllers[0] as! UINavigationController


        let sectionsVC : UIMasterViewController = navVC.topViewController as! UIMasterViewController
        sectionsVC.tableView.reloadData()

    }

我建议您使用NSNotificationCenter。 若你们想通过导航控制器来实现这一点,这里的代码应该在swift中对你们有用

let navController: UINavigationController = self.splitViewController!.viewControllers[0] as! UINavigationController

let controller: MasterViewController = navController.topViewController as! MasterViewController
controller.tableView.reloadData()

我建议您使用NSNotificationCenter。 若你们想通过导航控制器来实现这一点,这里的代码应该在swift中对你们有用

let navController: UINavigationController = self.splitViewController!.viewControllers[0] as! UINavigationController

let controller: MasterViewController = navController.topViewController as! MasterViewController
controller.tableView.reloadData()

我看到你已经弄明白了。但是,一种更干净、更能证明未来的方法是使用委托协议:

protocol DetailViewControllerDelegate: class {
    func reloadTableView()
}
然后将委托属性添加到DetailViewController类,并实现对委托的调用:

class DetailViewController: UIViewController {
    weak var delegate: DetailViewControllerDelegate?
    ....

    func reloadMasterTableView() {
        delegate?.reloadTableView()
    }
}
然后在MainViewController中实现委托方法:

extension MainViewController: DetailViewControllerDelegate {
    func reloadTableView() {
        tableView.reloadData()
    }
}
创建DetailViewController实例时,不要忘记在其上设置委托:

let detailViewController = DetailViewController()
detailViewController.delegate = self

我看到你已经弄明白了。但是,一种更干净、更能证明未来的方法是使用委托协议:

protocol DetailViewControllerDelegate: class {
    func reloadTableView()
}
然后将委托属性添加到DetailViewController类,并实现对委托的调用:

class DetailViewController: UIViewController {
    weak var delegate: DetailViewControllerDelegate?
    ....

    func reloadMasterTableView() {
        delegate?.reloadTableView()
    }
}
然后在MainViewController中实现委托方法:

extension MainViewController: DetailViewControllerDelegate {
    func reloadTableView() {
        tableView.reloadData()
    }
}
创建DetailViewController实例时,不要忘记在其上设置委托:

let detailViewController = DetailViewController()
detailViewController.delegate = self

那么问题是什么呢?我是说你面临什么问题?问题就在标题里。当某个元素(例如:开关)发生更改时,如何在UISplitview的主控位中刷新tableview?是的,您在正文中也提到了您知道如何处理它。那么,在实现上述代码时,您面临的问题是什么?我已经确定了3种可能的处理方法,我更喜欢使用导航属性,我只是不知道如何访问这样的父tableViewController,即navController.parentTableViewController.tableview.reloadata(),我也不明白。您的ViewController设置正确,因此如果其中的parentTableViewController是公共的,那么应该不会有任何问题。那么问题是什么?我是说你面临什么问题?问题就在标题里。当某个元素(例如:开关)发生更改时,如何在UISplitview的主控位中刷新tableview?是的,您在正文中也提到了您知道如何处理它。那么,在实现上述代码时,您面临的问题是什么?我已经确定了3种可能的处理方法,我更喜欢使用导航属性,我只是不知道如何访问这样的父tableViewController,即navController.parentTableViewController.tableview.reloadata(),我也不明白。您的ViewController设置正确,因此,如果parentTableViewController在其中是公共的,应该不会有任何问题。