押されたときにView Controllerが表示されるボタンがあります。これはユニバーサルアプリにあります。
iPhone では、View Controller はナビゲーション スタックにプッシュされます。iPad ではポップオーバーで表示されます。新しいView Controllerには、ボタンを担当するView Controllerであるデリゲートがあり、ユーザーがアイテムを選択すると、新しいView Controllerはメッセージをデリゲートに送信して、ユーザーが選択したものを渡します。
ポップオーバーを表示するものは何でもそれを閉じる責任があることを知っているので、UIPopoverへの参照を保持して、ボタンを担当するビューコントローラーからそれを閉じることができるようにします(同じビューコントローラーからポップオーバーが作成されます)。
しかし、新しいView Controllerをナビゲーションスタックからポップする責任を誰が負うべきかわかりません。ユーザーがアイテムを選択できるようにするView Controllerか、ボタンを持つView Controllerでしょうか?
私はすべきですか:
//Picker view controller
//....
[self.delegate finishedPickingItem:item];
//...
//The first view controller (the self.delegate in the above line):
-(void)finishedPickingItem:(NSString *)item {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.profilePopover dismissPopoverAnimated:YES];
} else {
[self.navigationController popToViewController:self animated:YES]; //Or should this be just popViewController:?
}
// do something with item...
}
または:
//Picker view controller
//...
[self.delegate finishedPickingItem:item];
[self.navigationController popViewControllerAnimated:YES];
//...
//The first view controller (the self.delegate in the above line):
-(void)finishedPickingItem:(NSString *)item {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.profilePopover dismissPopoverAnimated:YES];
}
// do something with item...
}