2017-07-30 84 views
0

更新我想,當用戶在詳細視圖,它代表了最喜歡的按鈕,點擊一個UIBarButtonItem以更新UISplitView主視圖。出於某種原因,委託方法永遠不會被調用。下面的相關代碼。有什麼建議麼?母版視圖不委託從細節視圖

import UIKit 
import WebKit 

protocol FavouriteCaseDelegate: class { 
func updateMasterForFavouriteStatusChange(caseID: Int, favouriteStatus: Bool) 
} 

class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

weak var favouriteDelegate: FavouriteCaseDelegate? = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Configure favourite bar button 
    favouriteButton = UIButton.init(type: .custom) 
    if caseFavourited == false { 
     favouriteButton.setImage(UIImage(named: "FavouriteIcon"), for: UIControlState.normal) 
    } else { 
     favouriteButton.setImage(UIImage(named: "FavouriteIconSelected"), for: UIControlState.normal) 
    } 
    favouriteButton.addTarget(self, action:#selector(didTapFavouriteBarButton), for: UIControlEvents.touchUpInside) 
    favouriteButton.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) 
    let favouriteBarButton = UIBarButtonItem.init(customView: favouriteButton) 
    self.navigationItem.rightBarButtonItem = favouriteBarButton 
} 

func didTapFavouriteBarButton() { 
    caseFavourited = !caseFavourited 

    CaseManager.caseWorker.changeFavouritedStateForCase(subjectID: subjectID, caseID: caseID, isFavourited: caseFavourited) 

    favouriteDelegate?.updateMasterForFavouriteStatusChange(caseID: caseID, favouriteStatus: caseFavourited) 
} 

import UIKit 

class MasterTableViewController: UITableViewController, FavouriteCaseDelegate { 

func updateMasterForFavouriteStatusChange(caseID: Int, favouriteStatus: Bool) { 
    print("updateMasterForFavourite called") 
    self.tableView.reloadData() 

    } 
} 
+1

你設置'detailviewcontroller.delegete = self'在mastertableviewcontroller? – ocanal

+1

嘗試在當你實例化或執行SEGUE細節視圖控制器的時間設定爲masterViewController委託。 – Amit

+0

啊哈 - 完成了!非常感謝! – Tom

回答

0

裏面你MasterTableViewController類,你需要設置DetailViewController-> favouriteDelegate to self例如: -

//Assuming you have reference of detailViewController inside your MasterTableViewController class 
let detailViewController = DetailViewController() 
detailViewController.favouriteDelegate = self 

一旦設置委託並調用方法,那麼它應該叫。

+0

我補充說,現在可惜的方法仍是沒有得到調用。 – Tom

+0

你在哪裏添加? –

+0

viewDidLoad中的母版視圖 – Tom