我刚刚用iPodSDK8.3更新了新的XCode 6.3,我的项目(在8.1和8.2上完美地工作)似乎与PopoverController有一些问题。
通常,当弹出器出现时,应该通过触及弹出器的范围(默认情况下)来排除它;但在我的示例中,中的相同代码在iOS 8.2和8.1中工作得很好,而在8.3上却不起作用。
这是我使用的代码:
-(void)showFilter:(id)sender{
if (!filterController)
filterController = [NodeFilterTableViewController nodeFilterController];
[filterController setModalPresentationStyle:UIModalPresentationPopover];
[filterController.popoverPresentationController setBarButtonItem:self.navigationItem.rightBarButtonItem];
[self presentViewController:filterController animated:YES completion:nil];
}简单地回顾一下这个问题:点击按钮就可以正确显示弹出窗口,同时也不能通过触摸边界以外的位置(只有在程序在iOS 8.3上运行时才会被取消)。
它是否改变了iOS 8.3中有关弹出控制器的内容?我查过在苹果iOS中的差异,但什么也没找到。
更新:
在这里,我添加了filterPopover的实现(对于这个问题唯一有用的方法):
-(void)viewDidLoad {
[super viewDidLoad];
self.clearsSelectionOnViewWillAppear = NO;
if (!_filterSetting) _filterSetting = [NSMutableDictionary new];
[self setModalInPopover:NO];
}由于popover的内容有一个单独的故事板,所以我使用这个方法来创建它的一个实例。
+(instancetype)nodeFilterController{
return [[UIStoryboard storyboardWithName:@"NodeFilterStoryboard" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"NodeFilterController"];
}其他代表方法:
-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion{
[self.delegate nodeFilterController:self didDismissWithFilters:_filterSetting];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self.delegate nodeFilterController:self didDismissWithFilters:_filterSetting];
}正如我说过的,记住在iOS 8/8.1/8.2 而不是 8.3上一切都是完美的。
发布于 2015-04-28 12:42:22
最后我发现了这个问题。
我仍然不知道为什么(因为在iOS < 8.3中完美地工作),但问题是,我试图在弹出窗口中显示的视图没有嵌入到导航控制器中。
如果你把所有的东西放在一个导航控制器内,它就完美地工作了!
这就是现在的代码:
if (!filterController){
filterController = [NodeFilterTableViewController nodeFilterController];
[filterController setDelegate:self];
}
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:filterController];
[navController setModalPresentationStyle:UIModalPresentationPopover];
[navController.popoverPresentationController setBarButtonItem:self.navigationItem.rightBarButtonItem];
[filterController setColorManager:_colorManager];
[filterController setFilterSetting:_filterSetting]; // Setup the precedent active filter if any
[self presentViewController:navController animated:YES completion:nil];https://stackoverflow.com/questions/29567857
复制相似问题