在我的Popover控制器中,我有一个表格视图。在选择单元格时,我想隐藏弹出窗口。 我怎样才能实现它。
答案 0 :(得分: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];
}
在表视图中,添加委托并在根视图控制器中实现委托。调用委托方法时,请使用上面的代码来关闭弹出窗口。
答案 1 :(得分: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];
答案 2 :(得分:1)
苹果文档推荐以下内容:
以编程方式解除弹出窗口需要指向弹出控制器的指针。获得这样一个指针的唯一方法是自己存储它,通常是在内容视图控制器中。这可确保内容视图控制器能够解除弹出窗口以响应适当的用户操作。
答案 3 :(得分:1)
尝试此代码
[viewController.popoverController dismissPopoverAnimated:YES];