2011-10-28 75 views

回答

9

在根視圖控制器的頭文件

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue; 

在實現文件:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"popover"]) 
    { 
     NSLog(@"%@",[segue destinationViewController]); 
     self.popSegue = (UIStoryboardPopoverSegue*)segue; 

     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

當過要隱藏在彈出:

if ([self.popSegue.popoverController isPopoverVisible]) 
    { 
     [self.popSegue.popoverController dismissPopoverAnimated:YES];   
    } 

在表視圖,添加委託並在根視圖控制器中實現委託。當委託方法被調用時,使用上面的代碼來消除彈出窗口。

+0

好雅」爲解決該難題。 – CodaFi

9

允許我建議一個稍微不同的解決方案,它包含傳遞popover控制器引用而不是segue引用。

在源視圖控制器的執行文件:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) { 
     MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController]; 
     UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue; 
     [viewController setPopoverController:[popoverSegue popoverController]]; 
    } 
} 

在目標視圖控制器的頭文件:

@property (weak, nonatomic) UIPopoverController* popoverController; 

在目標視圖控制器的執行文件:

@synthesize popoverController; 

同樣的文件,只要你想關閉popover:

[popoverController dismissPopoverAnimated:YES]; 
1

在didSelectRowAtIndexPath方法試試這個代碼

[viewController.popoverController dismissPopoverAnimated:YES]; 
相關問題