2010-12-28 4 views
0

私はUITabBarControllerを3つのボタンで使用したアプリケーションを持っています。私は3つのクラスも持っています。私がしたいのは、クラス2(ビュー2)のボタンでクラス1(ビュー1)の- (IBAction) doSomething: (id) sender {}を呼び出すことです。それはあなたのdoSomething方法(ない機能)を行い、新しいクラスのメソッドを作成するためにそれを使用することは何でも別のクラス(およびビュー)のボタンを持つクラスの関数(IBAction)を呼び出す

答えて

1

テイク。両方のコントローラは、クラスをインポートし、インスタンス化し、メソッドを使用できます。

doSomethingのいずれかのコントローラに通知を送信できますが、メソッド内のコードが実際に両方のコントローラに適用される場合は、両方のコントローラに提供してください。


コントローラに別のコントローラに通知を送信させることができます。あなたはボタンを押すコードを実行するために、クラス1を通知したいときはこのように通知を送信します:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCPerformButtonAction" 
               object:nil]; 

あなたはそれを呼び出すためにABCPerformButtonActionを持っていない、あなただけの、あなたがよ文字列を必要としますあなたの頭字語やアプリの名前などがわからないため、私はABCを使用しました。あなたが知らない何かの通知と同じ名前の通知を誤って送信しないようにします(あなたが使用しているサードパーティのライブラリなどを含む)を聞いています。

この通知が出ると、@ "ABCPerformButtonAction"をリッスンするためにdefaultCenterに登録されているオブジェクトは、選択したすべての操作を実行します。ここではどのようにコントローラ1つのレジスタ(これはのviewDidLoadようないくつかの場所やオブジェクトの初期化メソッドに配置する必要があります)です。

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(performDoSomething:) 
             name:@"ABCPerformButtonAction" 
             object:nil]; 

セレクタそこには、performDoSomethingは:,あなたがたときに実行するメソッドの名前だけです通知が消えます。そのメソッドは特定のフォーマットを持つ必要があるため、doSomethingメソッドを直接呼び出すことはできません。これは次のようになります:

- (void)performDoSomething:(NSNotification *)notif { 
    [self doSomething]; 
} 

ご覧のとおり、すべての方法が呼び出されます。明らかに、これ以上のことができ、通知とともに情報を送信することさえできます(下記参照)。

最後に、オブザーバが割り当て解除される前にオブザーバとしてオブジェクトを削除することも重要です。理にかなって

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

うまくいけば:通知を受け取るために登録された各オブジェクトのあなたのdeallocメソッドでは、これを追加します。 Apple documentation for NSNotificationCenterでは、詳細を説明しており、通知を使用するいくつかのサンプルアプリケーションを提供しています。

+0

メソッドright :)それは少し複雑です。私に説明させてください。 2番目のクラスでは、いくつかの設定をnsarrayに保存してplistに保存する方法があります(ボタンをクリックするとすべてが発生します)。私は2番目のビューから最初のビューに切り替えるときに、私は何かをせずに直接その設定を使用する必要があります。だから私は設定を取得するファーストクラスでメソッドを呼び出すために、2番目のクラスのメソッドにいくつかのコードを入れたいと思います。 – user556541

+0

[OK]を、あなたが望むことをする通知を送信する方法の説明を追加しました。 –

+0

これは試しましたか? –

関連する問題