目前,弹出框(Popover)是iPad设备特有的功能和特性(iPhone 尚不支持)。用户只需触摸弹出框外面,就可关闭弹出框。
在storyboard的interface builder中,拖曳编辑按钮(初始视图)到目标视图控制器(也就是弹出框窗口)图标上,在弹出切换类型菜单中,选择popover类型,如下图所示:
切换(Segue)对应的Attributes Inspector窗口,可检查相关的属性:
然后根据需要对弹出框的视图大小(Size Inspector窗口)和UI进行必要的编辑设计。
范例App的相关代码:
1. 首先初始视图控制器需要实现UIPopoverControllerDelegate协议,因为在用户关闭弹出框时,需要在方法popoverControllerDidDismissPopover 中获取弹出窗口的实例变量或属性值;
@interface ViewController : UIViewController <UIPopoverControllerDelegate>
2. prepareForSegue:sender 方法用来设置popoverController.delegate=self,表示由本实现文件来负责熟悉委托方法;
另外,根据本视图控制器的属性值,初始化弹出框的emailField文本框;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
UIStoryboardPopoverSegue *popoverSegue;
popoverSegue=(UIStoryboardPopoverSegue *)segue;
UIPopoverController *popoverController;
popoverController=popoverSegue.popoverController;
popoverController.delegate=self;
if([segue.identifier isEqualToString:@"showEditor"]){
EditorViewController *editorVC = segue.destinationViewController;
editorVC.emailField.text = self.emailLabel.text;
}
}
3. 在本视图控制器的实现文件中,实现popoverControllerDidDismissPopover 方法,负责处理弹出框关闭之后,获取弹出框中emailField 文本框的文本属性;
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
NSString *newEmail = ((EditorViewController *) popoverController.contentViewController).emailField.text;
self.emailLabel.text = newEmail;
}
范例iPad App的运行界面:
App实现的功能比较简单,实现在弹出框中编辑Email地址,编辑完成之后,点击弹出框外部任意地方,弹出框消失,新的Email地址更新到初始视图中。