UIStoryboardPopoverSegue在按钮触摸时打开多个窗口 [英] UIStoryboardPopoverSegue opening multiple windows on button touch

查看:49
本文介绍了UIStoryboardPopoverSegue在按钮触摸时打开多个窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 UIStoryboardPopoverSegue 来展示iOS 5 iPad应用的弹出窗口。 Segue工作得很好,但似乎包含按钮的工具栏是弹出控制器的直通视图,所以如果你一直按下按钮,会出现更多的弹出窗口。由于我没有创建并跟踪 UIPopoverController 我自己(因为故事板正在这样做)我再次触摸按钮时无法忽略它。有没有其他人遇到这个?我有一个与Apple打开的错误,但他们没有回复。



编辑:我已经使用下面的答案解决了这个问题。这是我最终使用的代码。 currentPopover 在我的视图控制器类中是一个 __ weak ivar,因此当控制器完成后,它将自动降为零。

   - (void)prepareForSegue:(UIStoryboardSegue *)segue发送者:(id)发件人{
if([segue] isKindOfClass:[UIStoryboardPopoverSegue class]]){
//关闭当前弹出框,设置新弹出框
[currentPopover dismissPopoverAnimated:YES];
currentPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
}


解决方案

你必须存储对作为中的 UIStoryboardPopoverSegue 类的一部分传递的 popoverController 属性的引用prepareForSegue 类方法。



要访问它,请在调用视图控制器中覆盖该方法,如下所示:

   - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
//在这种情况下,Storyboard Segue被命名为popover:
if( [segue.identifier compare:@popover] == NSOrderedSame){
// segue.popoverController只存在于popover segue的
// self.seguePopoverController是一个UIPopoverController *属性。
self.seguePopoverController = segue.popoverController;
}
}

然后你可以用通常的方式解雇它。 / p>

I'm using a UIStoryboardPopoverSegue to present a popover for an iOS 5 iPad app. The Segue works great, but it seems like the toolbar that contains the button is a passthrough view for the popover controller so if you keep pressing the button, more popovers appear. As I'm not creating and keeping track of the UIPopoverController myself (as the Storyboard is doing it) I can't dismiss it when the button is touched again. Has anyone else run into this? I have a bug open with Apple but they haven't responded.

EDIT: I've solved this using the answer below. Here is the code I ended up using. currentPopover is a __weak ivar in my view controller class, so when the controller is done it will drop to nil automatically.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue isKindOfClass:[UIStoryboardPopoverSegue class]]){
        // Dismiss current popover, set new popover
        [currentPopover dismissPopoverAnimated:YES];
        currentPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
    }
}

解决方案

You have to store a reference to the popoverController property passed as part of the UIStoryboardPopoverSegue class in the prepareForSegue class method.

To access it, over-ride the method in the calling view controller like this:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // The Storyboard Segue is named popover in this case:
    if ([segue.identifier compare:@"popover"] == NSOrderedSame) {
        // segue.popoverController is only present in popover segue's
        // self.seguePopoverController is a UIPopoverController * property.
        self.seguePopoverController = segue.popoverController;
    }
}

Then you can dismiss it in the usual way.

这篇关于UIStoryboardPopoverSegue在按钮触摸时打开多个窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆