2011-11-22 73 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

相關問題