2011-11-22 72 views
3

您好,现在我试图创建一个使用Xcode 故事板的Pop-OverView。首先,我iOS - 使用StoryBoard创建Popover视图

rootViewController, UIViewController, and UITableViewController 

我想要的UIView充当翻页和UITableView中会显示的导航栏项目控制器下酥料饼。

对于UITableView,我想在NavigationBar控制器下做一个Pop-Over。问题是,当我触摸Navigation项目来显示UITableViewController时,它显示正确,但是当我尝试关闭Pop-Over视图时,它不会关闭。然后,导航项目效果不佳。当我多次触摸它时,它会显示popOverView的多个实例。

这对我来说似乎没有意义。任何人都可以帮助我或告诉我在哪里可以找到有关此文档/教程?

UPDATE:

对于UIPopOverController,似乎现在的工作很好,但它仍然是缠着我,当我触摸导航项目多次。它将显示PopOver的多个实例。我如何处理它,所以它只会显示一个实例?

回答

3

我有同样的问题,主要是找到解决方案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]; 
} 
+1

我会打电话给这个解决方法过于复杂,但这主要是品味的问题。 [这个答案](http://stackoverflow.com/a/10238581/957768)有我的首选解决方法,并在同一问题的其他答案还有几个。 – rickster

+0

@rickster我同意,看起来更简单,我会在下次尝试。 – Symmetric

相关问题