2011-02-10 6 views
0

おはよう、 ここに問題があります。[self.view addSubview:pauseView]; pauseViewが現在のビューにロードされる前に、BOOL isPausedがfalseに設定され、サブビューが表示されます。私はpauseviewを使って、変数の値をfalseに変更しようとしていますが、現在のクラスにないので、これを行うことができません。 このトピックは既にstackoverflowでカバーされていますが、私はまだ私の問題を解決することはできません。私はこの問題を解決することができれば、それは私の3つの他のアプリで同じ種類の問題を解決します。ビューのサブビュークラス内からコントローラの変数またはメソッドにアクセスします

敬具、 Sonic555gr

答えて

0

は(のはMasterViewそれを呼びましょう)isPausedを定義するクラスのプロパティとしてisPausedを定義します。


// inside MasterView.h 
@property (nonatomic,assign) BOOL isPaused;

次にカスタムUIViewのサブクラスは、(のは、それを呼びましょうpauseViewあなたのサブビューを作りますPauseView)、このサブクラスでは、MasterView型のmasterというプロパティを定義します。


// inside PauseView.h 
@property (nonatomic,assign) MasterView *master

ウルpauseViewはちょうどこのプロパティを設定します。

あなたPauseViewクラスの最後に

// somewhere inside MasterView.m 
PauseView *pauseView = [[PauseView alloc] initWithFrame:frame]; 
pauseView.master=self; 

、あなたがisPausedプロパティを変更したい、あなたのコードのポイントで、次の操作を行います。


// somewhere in PauseView.m 
master.isPaused=YES
+0

を私は私がそのサブビューのいずれかに私のメインコントローラのインスタンスへの参照を渡すと、私は任意の変数を操作できることを今見ます!あなたは私の頭をきれいにしました。 :D –

+0

大丈夫です。しかし、このモデルを主張せず、ビューとコントローラを分離して保持し、コントローラがビューを制御しなければならないことを覚えておいてください。だから私はあなたのコードの例外でこれが願っていますが、ルールは望んでいません。 – viggio24

0

あなたが本当に持っている必要がありますあなたのアーキテクチャについて考えて、アプリケーションロジックをUIViewから離れてコントローラに戻してみてください。代理人は良い選択肢かもしれませんが、あなたのコードをもっと見たり、何を達成しようとしているのかを知ることは不可能です。

UIViewから変数を操作することを主張する場合は、初期化するときにviewControllerの参照をpauseViewに渡す必要があります。

だからあなたPauseViewクラスでは、カスタムの初期化子作成します。

-(id)initWithFrame:(CGRect)frame andViewController:(id)vc { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Any other custom initialisation here 
    } 
} 
関連する問題