2011-06-26 5 views
0

私は隠しボタンと、そのボタンの表示を解除するメソッドを持つ親ビューを持っています。その親ビューには、ボタンを隠すメソッドを呼び出す必要があるモーダルビューがあります。親ビューのボタンをモーダルビューから非表示にしますか?

ParentViewController.m

- (void)unhideButton { 
    myButton.hidden = NO; 
    NSLog(@"Unhide"); 
} 

ModalViewController.m

- (void)levelComplete { 
    ParentViewController *controller = [[ParentViewController] alloc] init]; 
    [controller unhideButton]; 
    [controller release]; 
} 

のNSLogメッセージUnhideが正常にコンソールに表示されるが、私は、モーダルビューコントローラを閉じたときに、ボタンはまだ隠れています。私は間違って何をしていますか?

+0

ここでボタンを非表示にしますか?それはおそらく再び呼び出されているでしょう。 – PengOne

+0

私はそれをインターフェイスビルダーで隠しとして設定しました。 – user813031

答えて

0

おそらくParentViewControllerのインスタンスによって提示されるModalViewControllerは、という新しい ParentViewControllerをインスタンス化しますか?私はあなたがそれを作成するときに、既存のParentViewControllerへの参照をModalViewControllerに渡してから、ModalViewControllerで親のボタンに隠れたプロパティを設定できるようにする必要があると思います。

優れたデザインプラクティスに従うには、ParentViewControllerがそのボタンの管理をModalViewControllerに委任する必要があります。 ParentViewControllerは、ボタンを公開する単純なプロトコルに準拠し、それを提示する前に自身をModalViewControllerのデリゲートとして設定します。

+0

どうすればいいですか? – user813031

+0

[cocoa core competencies guide](http://developer.apple.com/library/ios/#documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html)を読んでください。これにより、委任の概念がわかり、それがココアでどのように使われているのか、それをあなたのオブジェクトに実装する方法について説明します。 – RyanR

+0

委任は、アウトココアの2つの主要パターンの1つです。これは、MacとiPhoneのプログラミングをマスターするための鍵です。あなたが本当にそれを理解することを確認してください。 – vikingosegundo

1

モーダルビューコントローラには、parentViewControllerプロパティを使用して表示されているビューコントローラが自動的に参照されます。したがって、

[self.parentViewController unhideButton]; 

levelCompleteの方法で直接言うことができます。

しかし、新しいインスタンスを作成してメソッドを呼び出すと、元のインスタンスには影響しません。

+0

これはあなたが探していた答えです。 – Dad

+0

パーフェクト!ありがとうございました。 – user813031

関連する問題