2016-09-04 5 views
0

私はViewControllerAを実装しました。これはまた、サービスのデリゲート(基本的にはマルチペイパー接続)で実装されています。 私はビューController Bを持っています。そこにはユーザーとのやりとりと「送信」ボタンがあります。 このボタンの動作では、サービスAデリゲートのメソッドであるViewController Aからしか実行できないメソッドが呼び出されることを願っています。 これを達成する良い方法があるかどうか分かりますか?私はSwiftには新しいです。それを設計するより良い方法があれば、私も知りたいです。ありがとうございました。サービスから取得したメソッドを呼び出す方法ViewController ViewController Bのボタンで委譲された?

答えて

0

DelegateからViewControllerAからViewControllerBへの最善の方法。 ViewControllerBは、プロトコルとデリゲートプロパティを作成します。 ViewControllerAはプロトコルメソッドに準拠し、必須でオプションの(できること)メソッドを実装します。 ViewControllerBのアクションでは、実際にdelegateプロパティを使用してプロトコルメソッドを呼び出します。任意のメソッドを呼び出すことができるViewControllerA実装のメソッドを呼び出します。

プロトコル:

protocol ViewControllerBDelegate: class { 
    func didSendClicked(sender: UIbutton) 
} 

委任プロパティ:ViewControllerAによって

@property (weak) id<ViewControllerBDelegate> delegate; 

準拠プロトコル:

@interface ViewControllerA() <ViewControllerBDelegate> 
@end 

はviewControllerA方法を実装:

- (void)didSendClicked:(UIButton *)sender { 
    // do stuff 
} 

設定

delegate?.didSendClicked(self) 

viewControllerBからデリゲートメソッドを呼び出すviewControllerA

viewControllerB.delegate = viewControllerA(ref) 

ためdelegtaeソリューション:2 同じコールバックにはNSNotificationCenterを使用できます。

+0

ありがとうございました。私はそれを試してみる。 someServiceのデリゲートとしてAを、AのデリゲートとしてBを持つことは大丈夫でしょうか? – celluryz

+0

それは状況に応じて時々委任し、時にはポストノーティフィケーションが動作することに依存します。 – Sandy

関連する問題