首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIBarButtonItem + popover segue创建多个popover

UIBarButtonItem + popover segue创建多个popover
EN

Stack Overflow用户
提问于 2011-12-22 09:43:24
回答 3查看 5.1K关注 0票数 8

我目前有一个带有UIToolbar的iPad应用程序,其中包含两个UIBarButtonItems,每个都连接到一个popover segue。

当用户触摸任一UIBarButtonItems时,都会创建弹出窗口,而不是切换。这会创建多个重叠的弹出画面。我已经能够使用以下代码关闭之前创建的弹出窗口

代码语言:javascript
复制
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // First close the preferences popover if it's open per Apple guidelines
    if ([self.popoverA.popoverController isPopoverVisible]) {
        [self.popoverA.popoverController dismissPopoverAnimated:YES];
    }

    if ([self.popoverB.popoverController isPopoverVisible]) {
        [self.popoverB.popoverController dismissPopoverAnimated:YES];
    }
    ... code to manage segues ...
}

我也有UIButtons,它创建的弹出式segues的行为正常。由于与UIBarButtonItems关联的弹出窗口的这种行为,我的应用程序被拒绝。有人对具有多个UIBarButtonItems的UIToolbar有任何正确工作的建议或代码示例吗?当用户触摸窗口外时弹出窗口不会出现,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-22 10:18:43

当您在-prepareForSegue:sender:中收到消息时,取消段已为时已晚。

为了有效地做到这一点,您应该从视图控制器本身而不是栏按钮创建到弹出窗口的segues,以便它们仍然可以通过编程方式执行。现在,将UIBarButtonItem连接到一些方法,这些方法将有条件地呈现或关闭弹出窗口。

代码语言:javascript
复制
- (IBAction)showPopoverA
{
    if (self.popoverA.popoverController.popoverVisible)
        [self.popoverA.popoverController dismissPopoverAnimated:YES];

    [self performSegueWithIdentifier:@"ShowPopoverA"];
}
票数 8
EN

Stack Overflow用户

发布于 2012-12-18 05:28:07

这是做你需要做的事情的正确方法:

代码语言:javascript
复制
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"SurveyListPopover"]) {
        if (self.surveyListPopover == nil) {
            return YES;
        }
        return NO;
    }
    return YES;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"SurveyListPopover"]) {
        // Assign popover instance so we can dismiss it later
        self.surveyListPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
    }
}

这确保了如果已经显示了弹出窗口的实例,段将被取消。你只需要确保你的popover对象在故事板中有一个标识符。

票数 16
EN

Stack Overflow用户

发布于 2013-08-09 23:56:26

两者的结合为我带来了成功

代码语言:javascript
复制
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"showPopover"]) {
        self.tableOfContentsPopoverController = [(UIStoryboardPopoverSegue*)segue popoverController];
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"showPopover"]) {
        if (!self.tableOfContentsPopoverController.popoverVisible) {
            return YES;
        }
        return NO;
    }
    return YES;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8598557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档