我有一个按钮,按下时会显示一个视图控制器,这是一个通用应用程序。
在 iPhone 上,视图控制器被推送到导航堆栈上。在 iPad 上,它显示在弹出窗口中。新的视图控制器有一个委托,它是负责按钮的视图控制器,当用户选择了一个项目时,新的视图控制器向委托发送一条消息,将用户选择的内容传递给委托。
我知道无论呈现什么弹出框都应该负责解除它,所以我保留对 UIPopover 的引用,以便我可以从负责按钮的视图控制器中解除它(从创建弹出框的同一视图控制器)。
但是我不确定谁应该负责将新的视图控制器从导航堆栈中弹出,应该是允许用户选择项目的视图控制器,还是具有按钮的视图控制器?
我应该这样做:
//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...
}