2011-11-09 10 views
0

私はスーパービューを持っており、サブビューを追加して選択します。スーパービュー(メインビュー)で、私は以下を行います: [self.view addSubview:cityViewController.view];ios superviewとsubview

cityViewでは、私がしなければならないことをやり遂げたら、私はただします self.view removeFromSuperView。

質問は、スーパービュー内からサブビューが削除されたことをどのように伝えますか。

答えて

3

現在のところ、現在のビューコントローラ(メインと呼ぶ)は、cityViewControllerのビューを追加するだけで、現在のビューコントローラにビューを追加/削除する処理を維持しているだけなので、正直なところ、メインコントローラコール[cityViewController.view removeFromSuperView]

このようにして、この通知を受信したときに実行するコードを実行することができます(呼び出す方法かUINotification)。

- サンプルUINotificationコードの編集 -

main.m

... 
//Define cityViewController as an iVar and alloc/init it 
[[UINotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishView:) name:@"DidFinishView" object:nil]; 
[self.view addSubview:cityViewController.view]; 
... 

-(void) didFinishView:(NSNotification *)notification { 
    [cityViewController.view removeFromSuperView]; 
} 

CityViewController.m

-(IBAction) doneButtonClick:(id) sender { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DidFinishView" object:nil]; 
} 
+0

しかし、cityviewの発射イベントの結果の親ビューでイベントを処理するには – Jesse

+0

再度、これを行う方法はいくつかあります。最も簡単な方法の1つは、UINotificationを使用することです。デモのために私の答えにコードを追加します。 – Geekswordsman

0

迅速な答えは、あなたのビューがあってはならないですそれ自体を取り除く。ビューは、オブジェクト間の通信メカニズムを介して、関連するコントローラとユーザーのやりとりを通信する方が良い方法です。最も一般的な方法は、ダイレクトメッセージング、プロトコル、および通知です。 iOSフレームワークはこれらすべてを使用しており、それらを説明する素晴らしいドキュメントがあります。ここに簡単な要約があります:

  • ダイレクトメッセージング。オブジェクトが既知の型の特定のオブジェクトと通信する必要がある場合に使用します。たとえば、MyViewが常にMyViewControllerに含まれており、メッセージを送信する必要がある場合は、MyViewControllerオブジェクトへのポインタを保持するMyViewクラスにプロパティを追加できます。 myViewからmyViewController[myView.myViewController userDidTapSaveButton]などのメッセージを送信できます。

  • プロトコル。プロトコルは、契約を遵守する以外に、互いに何も知らないオブジェクト間のコントラクトを定義します。たとえば、UITableViewは、それがUITableViewDelegateプロトコルに準拠するデリゲートであることを認識し、必要なプロトコルメッセージをそのデリゲートに送信することができます。どのオブジェクトもUITableViewDelegateプロトコルに準拠することができます。

  • 通知。通知によって、オブジェクトは、他のオブジェクトが監視および応答できる中央メカニズム(NSNotificationCenter)を介して通知を送信できます。通知は、通知を送信しているオブジェクトが通知を監視しているオブジェクトを認識していないか気にしていない場合に便利です。

これらの方法については関連文書と他のQ & Aをお読みください。また、MVC(Model/View/Controller)デザインパターンを少し勉強して、アプリケーションロジックをどこに置くべきかを知ることができます。一般的に、ビューはその表示(コントローラーによって設定されたプロパティに基づいて)、ユーザーの操作を観察/応答するだけでなく、コントローラーに関連するアクションを通知する必要があります。

関連する問題