委托方法没有被调用

问题描述:

我有一个分割视图控制器和主视图有一个按钮(注意)将注释视图推到细节视图。 Detail视图使用导航控制器来帮助用户在多个视图控制器之间来回导航。在这些视图控制器内部,我拥有将Note视图推到其自身上的委托方法。这是我的UI是什么样子:委托方法没有被调用

enter image description here

enter image description here

的备注按钮的作品如我所料,当应用程序最初运行。当我点击列表中的某个元素并遍历更深层次的视图时,它仍然有效。但是,当我回到第一个视图(最初工作时)时,它停止工作。我不确定是什么原因导致了这种不一致的行为,如果你们能帮我弄清楚这一点,我很感激。

这是我的代码摘录:

母版视图

protocol ChildViewDelegate: class { 
    func updateView() 
    func pushOntoDetailViewNaviController(_ viewName: String) 
} 

class MasterViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSFetchedResultsControllerDelegate, GADBannerViewDelegate { 
    .... 
    @IBAction func noteTapped(_ sender: UIBarButtonItem) { 
     pushOntoActiveNaviController("NoteGalleryView") 
    } 

    private func pushOntoActiveNaviController(_ viewName: String) { 

     guard let splitView = self.splitViewController else { 
      return 
     } 

     if splitView.viewControllers.count > 1 { 
      // Push view onto any active detailed view 
      self.delegate?.pushOntoDetailViewNaviController(viewName) 
     } else { //If active view is the master view (true for iphone), then push it onto the master view 
      if let vc = storyboard?.instantiateViewController(withIdentifier: viewName) { 
      self.navigationController?.pushViewController(vc, animated: true) 
      } 
     } 


    } 
    .... 
} 

详细查看

class DetailTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, GADBannerViewDelegate { 
override func viewDidLoad() { 
    super.viewDidLoad() 

    masterViewController = (self.splitViewController?.viewControllers.first as! UINavigationController).topViewController as? MasterViewController 
    masterViewController?.delegate = self 

} 

extension DetailTableViewController: ChildViewDelegate { 

    func updateUI() { 
    .... 
    } 

    func updateView() { 
     DispatchQueue.main.async { 
      self.tableView.reloadData() 
      self.updateUI() 

     } 

    } 

    func pushOntoDetailViewNaviController(_ viewName: String) { 
     if let vc = storyboard?.instantiateViewController(withIdentifier: viewName) { 
      self.navigationController?.pushViewController(vc, animated: true) 
     } 

    } 
} 

万一有人有同样的问题,那是因为我在viewDidLoad中设置委托变量,当view最初加载时调用该变量。当用户从更深的视图控制器导航回视图时,视图再次出现时不会调用它。委托变量应该已经在viewWillAppear中设置了。