UIPopOverController + UITableView - 选择单元格时隐藏弹出框
Posted
技术标签:
【中文标题】UIPopOverController + UITableView - 选择单元格时隐藏弹出框【英文标题】:UIPopOverController + UITableView - Hide popover when cell is selected 【发布时间】:2011-10-28 18:56:00 【问题描述】:在我的 Popover 控制器中,我有一个表格视图。在选择一个单元格时,我想隐藏弹出窗口。 我怎样才能实现它。
【问题讨论】:
【参考方案1】:在根视图控制器的头文件中:
@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];
在表格视图中,添加一个委托并在根视图控制器中实现该委托。调用委托方法时,使用上面的代码关闭弹出窗口。
【讨论】:
很高兴你解决了这个难题。【参考方案2】:请允许我提出一个稍微不同的解决方案,其中包括传递 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;
相同的文件,只要你想关闭弹出框:
[popoverController dismissPopoverAnimated:YES];
【讨论】:
【参考方案3】:苹果文档推荐以下内容:
以编程方式关闭弹出框需要指向弹出框控制器的指针。获得这样一个指针的唯一方法是自己存储它,通常在内容视图控制器中。这可确保内容视图控制器能够关闭弹出框以响应适当的用户操作。
http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/Popovers.html
【讨论】:
【参考方案4】:在 didSelectRowAtIndexPath 中试试这个代码
[viewController.popoverController dismissPopoverAnimated:YES];
【讨论】:
以上是关于UIPopOverController + UITableView - 选择单元格时隐藏弹出框的主要内容,如果未能解决你的问题,请参考以下文章
当 UIPopoverController 在屏幕上时,无法与带有 UIPopoverController 的 UISearchBar 进行交互