0
我有一個分割視圖控制器和主視圖有一個按鈕(注意)將註釋視圖推到細節視圖。 Detail視圖使用導航控制器來幫助用戶在多個視圖控制器之間來回導航。在這些視圖控制器內部,我擁有將Note視圖推到其自身上的委託方法。這是我的UI是什麼樣子:委託方法沒有被調用
的備註按鈕的作品如我所料,當應用程序最初運行。當我點擊列表中的某個元素並遍歷更深層次的視圖時,它仍然有效。但是,當我回到第一個視圖(最初工作時)時,它停止工作。我不確定是什麼原因導致了這種不一致的行爲,如果你們能幫我弄清楚這一點,我很感激。
這是我的代碼摘錄:
母版視圖
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)
}
}
}