Ipad iOS-使用故事板创建Popover视图

Ipad iOS-使用故事板创建Popover视图,ipad,ios5,uipopovercontroller,xcode4.2,storyboard,Ipad,Ios5,Uipopovercontroller,Xcode4.2,Storyboard,大家好,现在我正在尝试使用Xcode创建一个Pop概述 故事板。首先,我有 rootViewController, UIViewController, and UITableViewController 我希望UIView充当页面翻转,UITableView将在navigationBar项目控制器下显示popOver 对于UITableView,我想在NavigationBar控制器下弹出一个窗口。问题是,当我触摸导航项以显示UITableViewController时,它会正确显示,但当我尝

大家好,现在我正在尝试使用Xcode创建一个Pop概述 故事板。首先,我有

rootViewController, UIViewController, and UITableViewController
我希望UIView充当页面翻转,UITableView将在navigationBar项目控制器下显示popOver

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

这对我来说似乎没有意义。有人能帮我吗?或者告诉我在哪里可以找到关于这个的文档/教程

更新:


对于UIPopOverController,它现在似乎工作得很好,但当我多次触摸导航项时,它仍然会困扰我。它将显示PopOver的多个实例。如何处理它,使它只显示一个实例?

我也遇到了同样的问题,并且基本上找到了解决方案。基本上,每次按下按钮时,您都会改变按钮的动作,以显示或关闭popover。以下是我最终得到的代码:

@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];
}
@接口过滤器TableViewController:UITableViewController{
UIPopoverController*editPopover;
发送人的id;
id savedittarget;
自我保护作用;
}
-(void)prepareForSegue:(uistoryboardpovoversegue*)序列发送方:(id)发送方{
if([[segue identifier]IsequalString:@“EditFilterSegue”]){
//保存编辑按钮的信息,以便我们可以还原它
saveEditAction=[sender action];
saveEditTarget=[sender target];
saveEditSender=发送方;
//将“编辑”按钮的目标更改为“我们”,并将其操作更改为取消弹出框
[发件人设置操作:@selector(dismissPopover:)];
[发送方设置目标:self];
//保存popover控制器并将自己设置为its代理,以便
//当此popover被解除时恢复按钮操作(当popover
//通过点击视图外部而不是再次点击编辑按钮来取消)
editPopover=[(UIStoryboardPopoverSegue*)segue popoverController];
editPopover.delegate=(id)self;
}
}
-(无效)解除权限:(id)发件人
{
//在关闭popover之前恢复按钮操作
[saveEditSender设置操作:saveEditAction];
[saveEditSender设置目标:saveEditTarget];
[editPopover dismissPopoverAnimated:是];
}
-(BOOL)popoverController应为popoverController:(UIPopoverController*)popoverController
{
//爆米花外面发生了窃听。
//在按钮关闭之前恢复按钮操作。
[saveEditSender设置操作:saveEditAction];
[saveEditSender设置目标:saveEditTarget];
返回YES;
}
-(无效)视图将消失:(BOOL)已设置动画
{
[超级视图将消失:动画];
//在我们离开此视图之前(按下后退按钮)
//删除编辑弹出框(如果存在)。
[自我解除权限:saveEditSender];
}

我认为这种解决方法过于复杂,但这主要是一个品味问题。有我喜欢的解决方法,在同一个问题的其他答案中还有一些。@rickster我同意,这看起来简单多了,我下次会试试。