2012-04-29 15 views
3

これはおそらくこれをオーバーコンプリートしていますが、モーダルの親のプロパティにアクセスする方法はありますか?iOS - モーダルの親プロパティにアクセスする

したがって、私は "presentModalViewController"を呼び出してから、モーダルから呼び出されたビューコントローラのいくつかのプロパティにアクセスできます。

おかげで、[OK]を アシュリー

+0

私の経験では、現在のところ、モーダルを持つビューのparentViewプロパティを取得/設定するために委譲パターンを使用します。 – Sakares

答えて

1

ので、この質問をするので、私は、彼らがうまくいくかのように見えたが、なかったいくつかのテクニックを試してみました。

このような例です。それはモーダルを提示し、正規のUIViewControllerであった

((pController *)self.parentViewController).testString; 

しかし、親は実際にUITabBarControllerだった、とさえselectedViewControllerは動作しませんでした使用します。

私のソリューションは、私は、実装ファイルでそれを合成した後、私のモーダルの.hファイルにmodalViewControllerのinitのallocを/

id delegate; 

@property (nonatomic, assign) id delegate; 

を追加することでしたが、それを提示する直前に、 set

modalViewController.delegate = self; 

このようにして、自分のモーダル内からself.delegateを呼び出すことができます。これは、それがあるコントローラを表示している言っていないので、これはまだ十分ではありませんでしたので、私は

self.delegate.testString; 

を言うことができない。しかし、私は以前学んだ鋳造は私が

((pController *)self.delegate).testString; 
の完全に動作するソリューションを取得することができ

私はこれを邪魔していないと思うし、これが将来誰かを助けることができることを願っています。

+2

適切な方法は、プロトコルを定義し、デリゲートをID デリゲートとして定義することです。アクセスポイントでは、ハードキャスティングではなくself.delegate.testStringを呼び出すことができます。 – fengd

4

あなたはiOSの5を使用している場合、あなたはここで親ビューコントローラ

にアクセスするためにself.presentingViewControllerを呼び出すことができますapple reference

+0

このアプリは古いiOS版をサポートしているので、これはできません。とにかくありがとう。 –

2

あなたの答えはほぼ正しかったです - あなたはむしろparentViewControllerよりpresentingViewControllerをしたいが、これは可能性厳密な結合(2つのクラスの間の依存関係、つまり、相互にしか働かないということを意味する)につながります。

プロトコルをまだ定義するのが最善ですが、デリゲートプロパティは必要ありません。presentingViewControllerプロパティと同じ値になります。

+0

presentingViewControllerはiOS5のみです。これは古いバージョンとの互換性が必要です。 –

関連する問題