私はスーパービューを持っており、サブビューを追加して選択します。スーパービュー(メインビュー)で、私は以下を行います: [self.view addSubview:cityViewController.view];ios superviewとsubview
cityViewでは、私がしなければならないことをやり遂げたら、私はただします self.view removeFromSuperView。
質問は、スーパービュー内からサブビューが削除されたことをどのように伝えますか。
私はスーパービューを持っており、サブビューを追加して選択します。スーパービュー(メインビュー)で、私は以下を行います: [self.view addSubview:cityViewController.view];ios superviewとsubview
cityViewでは、私がしなければならないことをやり遂げたら、私はただします self.view removeFromSuperView。
質問は、スーパービュー内からサブビューが削除されたことをどのように伝えますか。
現在のところ、現在のビューコントローラ(メインと呼ぶ)は、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];
}
迅速な答えは、あなたのビューがあってはならないですそれ自体を取り除く。ビューは、オブジェクト間の通信メカニズムを介して、関連するコントローラとユーザーのやりとりを通信する方が良い方法です。最も一般的な方法は、ダイレクトメッセージング、プロトコル、および通知です。 iOSフレームワークはこれらすべてを使用しており、それらを説明する素晴らしいドキュメントがあります。ここに簡単な要約があります:
ダイレクトメッセージング。オブジェクトが既知の型の特定のオブジェクトと通信する必要がある場合に使用します。たとえば、MyView
が常にMyViewController
に含まれており、メッセージを送信する必要がある場合は、MyViewController
オブジェクトへのポインタを保持するMyView
クラスにプロパティを追加できます。 myView
からmyViewController
に[myView.myViewController userDidTapSaveButton]
などのメッセージを送信できます。
プロトコル。プロトコルは、契約を遵守する以外に、互いに何も知らないオブジェクト間のコントラクトを定義します。たとえば、UITableView
は、それがUITableViewDelegate
プロトコルに準拠するデリゲートであることを認識し、必要なプロトコルメッセージをそのデリゲートに送信することができます。どのオブジェクトもUITableViewDelegate
プロトコルに準拠することができます。
通知。通知によって、オブジェクトは、他のオブジェクトが監視および応答できる中央メカニズム(NSNotificationCenter
)を介して通知を送信できます。通知は、通知を送信しているオブジェクトが通知を監視しているオブジェクトを認識していないか気にしていない場合に便利です。
これらの方法については関連文書と他のQ & Aをお読みください。また、MVC(Model/View/Controller)デザインパターンを少し勉強して、アプリケーションロジックをどこに置くべきかを知ることができます。一般的に、ビューはその表示(コントローラーによって設定されたプロパティに基づいて)、ユーザーの操作を観察/応答するだけでなく、コントローラーに関連するアクションを通知する必要があります。
しかし、cityviewの発射イベントの結果の親ビューでイベントを処理するには – Jesse
再度、これを行う方法はいくつかあります。最も簡単な方法の1つは、UINotificationを使用することです。デモのために私の答えにコードを追加します。 – Geekswordsman