2010-11-22 15 views
0

私はビューとしてUIViewを初期化するView Controllerを持っています。そのビューは別のUIViewをサブビューとして初期化します。どちらのUIViewも、デリゲート/プロトコルを介してView Controllerと通信します。2つのView Controllerインスタンス間で値を共有する方法は?

それぞれのUIViewはのViewControllerのインスタンスを作成し、デリゲートにそれが等しいなる:

ViewController *aDelegate = [[ViewController alloc] init]; 
self.delegate = aDelegate; 

問題:ビューコントローラ(INT)と呼ばれる変数を有する両方UIViewsによって修飾された選択。両方のビューは、お互いが変数をどのように変更したかを知っていなければなりませんが、それぞれがView Controllerの異なるインスタンスを持ち、通信が不可能であるためです。どうすればこの問題を解決できますか?

おかげトン

EDIT:ピーターは、私が好きなのビューの作成時にデリゲートを割り当てる述べたが、私はサブビューのためにそれはUIViewのではなくビューコントローラに作成されているためという方法を行うだろう。 PS。実際には、サブビューのサブビューのサブビューですので、View Controllerでそれらをすべて作成し、それをデリゲートとして割り当てることはできますか?

次のようにデリゲートを割り当てしようとしましたが、私はビューからのViewControllerメソッドを呼び出すしようとすると、それが継続的にクラッシュ:

MyView *mainView = [[MyView alloc] initWithFrame:frame]; 
self.view = mainView; 
mainView.delegate = self; 
[mainView release]; 
+0

おそらく、この方法を逆にしたいことがあります。 1つのViewControllerと2つのUIViewがあります。 – joshpaul

+0

それは私が持っている、サブビューを持つuiviewとビューコントローラです – John

+0

可能な複製:http://stackoverflow.com/q/3185760/40175 – Akusete

答えて

0

ビューはお互いを知る必要はありません。あなたのビューコントローラでは、その後、あなたの子ビューを作成し、デリゲートを割り当てるサブビュー

@property (nonatomic, retain) MyView *myView;

のプロパティを定義します。これは、その後、私はちょうどそれがどのように見えるかを推測し、あなたのデリゲートメソッドで、あなたはビューコントローラだけでなく、他のビューを更新することができますのviewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGRect frame = ...; 
    MyView *subView = [[MyView alloc] initWithFrame:frame]; 
    self.myView = subView; 
    subView.delegate = self; 
    [self.view addSubView:subView]; 
    [subView release]; 


    self.view.delegate = self; 
} 

を行うことができます。

- (void)view:(MyView *)view didUpdateSelection:(int)newSelection { 
    self.selection = newSelection; 
    if (view == self.view) { 
     self.myView.selection = newSelection; 
    } 
    else { 
     self.view.selection = newSelection; 
    } 
} 
0

それは代わりにビューコントローラの別のインスタンスを割り当てる各ビューのように聞こえる、あなたはビューを作成したビューコントローラのインスタンスを各ビューのデリゲートとして割り当てる必要があります。

これにアプローチする1つの方法は、ビューを作成するときにビューコントローラがビューのデリゲートとして割り当てられるようにすることです。

+0

素晴らしい、どのように私はサブビューのためにそれを行うだろうか? – John

+0

1つのオプションは、編集で前述したように、ビューコントローラ内のすべてのサブビューを作成し、そこに代理人を割り当てることです。 –

+0

それを試みましたが、それはクラッシュし続け、私が使っているもので上記の編集を行いました。これまでのところ助けてくれてありがとう。 – John

関連する問題