2017-07-30 8 views
0

ユーザーがUIBarButtonItemをタップしたときにマスタービューをUISplitViewに更新しようとしています。詳細ビューでは、これはお気に入りのボタンです。何らかの理由で、デリゲートメソッドが呼び出されることはありません。以下の関連コード。助言がありますか?あなたは、例えばDetailViewController-> favouriteDelegate to selfを設定する必要があなたのMasterTableViewControllerクラス内マスタービューが詳細ビューからデリゲートで更新されない

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

mastertableviewcontrollerに 'detailviewcontroller.delegete = self'を設定しましたか? – ocanal

+1

segueをディテール・ビュー・コントローラにインスタンス化または実行するときに、masterViewControllerをデレゲートとして設定してください。 – Amit

+0

ああ - それは終わった!どうもありがとう! – Tom

答えて

0

: - 一度

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

それが呼ばれるべきでデリゲートを設定し、メソッドを呼び出します。

+0

これを追加しましたが、残念ながらこのメソッドはまだ呼び出されていません。 – Tom

+0

どこに追加しましたか? –

+0

マスタービューのviewDidLoad – Tom

関連する問題