2017-07-27 151 views
0

我有一個分割視圖控制器和主視圖有一個按鈕(注意)將註釋視圖推到細節視圖。 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) 
     } 

    } 
} 

回答

0

萬一有人有同樣的問題,那是因爲我在viewDidLoad中設置委託變量,當view最初加載時調用該變量。當用戶從更深的視圖控制器導航回視圖時,視圖再次出現時不會調用它。委託變量應該已經在viewWillAppear中設置了。

相關問題