如何关闭故事板弹出窗口

2024-03-12

我创建了一个弹出窗口UIBarButtonItem使用 Xcode Storyboards(因此没有代码),如下所示:

呈现弹出窗口效果很好。但是,我无法让弹出窗口消失当我点击UIBarButtonItem这让它出现了。

当按下按钮(第一次)时,会出现弹出窗口。当再次按下按钮(第二次)时,相同的弹出窗口会出现在其顶部,所以现在我有两个弹出窗口(如果继续按下按钮,则会有更多弹出窗口)。根据iOS 人机界面指南 http://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW40我需要使弹出窗口在第一次点击时出现并在第二次点击时消失:

确保屏幕上一次只能看到一个弹出窗口。您不应同时显示多个弹出窗口(或设计为外观和行为类似于弹出窗口的自定义视图)。特别是,您应该避免同时显示级联或层次结构的弹出窗口,其中一个弹出窗口从另一个弹出窗口中出现。

当用户点击时如何关闭弹出窗口UIBarButtonItem第二次?


EDIT:这些问题似乎从 iOS 7.1 / Xcode 5.1.1 开始得到修复。 (可能更早,因为我无法测试所有版本。肯定是在 iOS 7.0 之后,因为我测试了那个版本。)当您从UIBarButtonItem,segue 确保再次点击弹出框会隐藏弹出框而不是显示重复项。它适用于新的UIPresentationControllerXcode 6 也为 iOS 8 创建了基于 -based 的弹出窗口。

由于我的解决方案对于那些仍然支持早期 iOS 版本的人来说可能具有历史意义,因此我将其保留在下面。


如果您存储对 segue 的弹出窗口控制器的引用,请在重复调用时将其设置为新值之前将其关闭prepareForSegue:sender:,您所避免的只是重复按下按钮时获得多个堆叠弹出框的问题 - 您仍然无法按照 HIG 的建议使用按钮来关闭弹出框(如 Apple 的应用程序等中所示)

不过,您可以利用 ARC 归零弱引用来实现简单的解决方案:

1:从按钮继续

从 iOS 5 开始,你无法通过从UIBarButtonItem,但在 iOS 6 及更高版本上可以。 (在 iOS 5 上,您必须从视图控制器本身分离,然后调用按钮的操作performSegueWithIdentifier:检查弹出窗口后。)

2:使用对弹出窗口的引用-shouldPerformSegue...

@interface ViewController
@property (weak) UIPopoverController *myPopover;
@end

@implementation ViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // if you have multiple segues, check segue.identifier
    self.myPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if (self.myPopover) {
        [self.myPopover dismissPopoverAnimated:YES];
        return NO;
    } else {
        return YES;
    }
}
@end

3:没有第三步!

在这里使用归零弱引用的好处是,一旦弹出窗口控制器被解除——无论是以编程方式shouldPerformSegueWithIdentifier:,或者由用户点击弹出窗口之外的其他地方自动 - ivar 转到nil再次,我们又回到了最初的状态。

如果不将弱引用归零,我们还必须:

  • set myPopover = nil当驳回它时shouldPerformSegueWithIdentifier:, and
  • 将自己设置为弹出窗口控制器委托以捕获popoverControllerDidDismissPopover:并且还设置了myPopover = nil在那里(所以我们可以在弹出窗口自动关闭时捕获)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何关闭故事板弹出窗口 的相关文章

随机推荐