可能重复:
如何关闭情节提要弹出框
我有一个 iPad 故事板。一个视图中的条形按钮项被 Control 拖动到另一个视图 - 并且选择了弹出框样式。当我按下按钮时,新的弹出窗口视图会显示在弹出窗口中,但我有两个问题:
- 当我再次按下按钮时,会显示另一个弹出视图实例——我可以看到,黑色边框越来越暗。如果弹出视图打开并且我按下按钮,弹出视图应该关闭。我怎样才能做到这一点?
- 目前,即使视图中的内容没有那么高,新的弹出视图也会浮动到屏幕的按钮上。如何控制弹出视图的尺寸?
编辑1:
我通过从控制器底部的黄色控制器图标拖动到另一个视图来创建一个 segue,该视图应该在弹出框内。此弹出框的标识符是 settingsPopover。
然后我在 IBAction 中执行此操作:
- (IBAction)settingsButtonTapped:(id)sender {
[self performSegueWithIdentifier:@"settingsPopover" sender:self];
}
但这给了我这个错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UIStoryboardPopoverSegue 必须从条形按钮项或视图呈现。”
我是否以不好的方式或在performSegueWithIdentifier
错误的呼吁中创造了转场?
编辑2:
我创建了这个 IBAction:
- (IBAction)settingsButtonTapped:(id)sender {
if (_settingsPopover == nil) {
SettingsViewController* settingsView = [[SettingsViewController alloc] initWithStyle:UITableViewStylePlain];
self.settingsPopover = [[UIPopoverController alloc] initWithContentViewController:settingsView];
}
[self.settingsPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
它几乎可以工作,但一个缺点是它没有使用我的 Storyboard 中设计的 UIView。例如,在我的故事板中,具有类 SettingsViewController 的视图被设计为分组表视图。有没有办法显示在弹出框内的故事板中设计的 UIView 而不是原始的 SettingsViewController 实例?
解决方案:
我在 Storyboard 中使用标识符“settingsPopover”创建了一个全局 segue。
- (IBAction)settingsButtonTapped:(id)sender {
if (self.settingsPopover==nil) {
[self performSegueWithIdentifier:@"settingsPopover" sender:sender];
}
}
#pragma mark - UIView
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"settingsPopover"]) {
self.settingsPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
self.settingsPopover.delegate = self;
}
}
#pragma mark - UIPopoverControllerDelegate
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
self.settingsPopover = nil;
}