【问题标题】:iOS - Create an Popover View using StoryBoardiOS - 使用 StoryBoard 创建弹出视图
【发布时间】:2011-11-22 10:51:48
【问题描述】:

您好,现在我正在尝试使用 Xcode 创建一个 Pop-OverView 故事板。首先,我有

rootViewController, UIViewController, and UITableViewController

我希望 UIView 充当翻页,UITableView 将在 navigationBar 项目控制器下显示 popOver。

对于 UITableView,我想在 NavigationBar 控制器下制作一个 Pop-Over。问题是,当我触摸 Navigation 项以显示 UITableViewController 时,它显示正确,但是当我尝试关闭 Pop-Over View 时,它不会关闭。然后,导航项不能正常工作。当我多次触摸它时,它会显示多个 popOverView 实例。

这对我来说似乎没有意义。谁能帮助我或告诉我在哪里可以找到这方面的文档/教程?

更新:

对于 UIPopOverController,它现在似乎运行良好,但是当我多次触摸导航项时它仍然困扰着我。它将显示多个 PopOver 实例。我该如何处理它,所以它只会显示一个实例?

【问题讨论】:

    标签: ipad ios5 uipopovercontroller xcode4.2 storyboard


    【解决方案1】:

    我遇到了同样的问题,大部分都找到了解决方案here。基本上,每次按下按钮以显示或关闭弹出框时,您都会更改按钮的操作。这是我最终得到的代码:

    @interface FilterTableViewController : UITableViewController {
        UIPopoverController *editPopover;
        id saveEditSender;
        id saveEditTarget;
        SEL saveEditAction;
    }
    
    -(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender{
        if([[segue identifier] isEqualToString:@"EditFilterSegue"]){
            // Save the edit button's info so we can restore it
            saveEditAction = [sender action];
            saveEditTarget = [sender target];
            saveEditSender = sender;
    
            // Change the edit button's target to us, and its action to dismiss the popover
            [sender setAction:@selector(dismissPopover:)];
            [sender setTarget:self];
    
            // Save the popover controller and set ourselves as the its delegate so we can
            // restore the button action when this popover is dismissed (this happens when the popover
            // is dismissed by tapping outside the view, not by tapping the edit button again)
            editPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
            editPopover.delegate = (id <UIPopoverControllerDelegate>)self;
        }
    }
    
    -(void)dismissPopover:(id)sender
    {
        // Restore the buttons actions before we dismiss the popover
        [saveEditSender setAction:saveEditAction];
        [saveEditSender setTarget:saveEditTarget];
        [editPopover dismissPopoverAnimated:YES];
    }
    
    -(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
    {
        // A tap occurred outside of the popover.
        // Restore the button actions before its dismissed.
        [saveEditSender setAction:saveEditAction];
        [saveEditSender setTarget:saveEditTarget];
    
        return YES;
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
    
        // Before we navigate away from this view (the back button was pressed)
        // remove the edit popover (if it exists).
        [self dismissPopover:saveEditSender];
    }
    

    【讨论】:

    • 我认为这种解决方法过于复杂,但这主要是个人喜好问题。 This answer 有我首选的解决方法,在同一问题的其他答案中还有更多。
    • @rickster 我同意,这看起来简单多了,我下次试试。
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多