首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIPopoverController不再通过点击IOS8.3而解散

UIPopoverController不再通过点击IOS8.3而解散
EN

Stack Overflow用户
提问于 2015-04-10 17:57:17
回答 1查看 673关注 0票数 1

我刚刚用iPodSDK8.3更新了新的XCode 6.3,我的项目(在8.1和8.2上完美地工作)似乎与PopoverController有一些问题。

通常,当弹出器出现时,应该通过触及弹出器的范围(默认情况下)来排除它;但在我的示例中,中的相同代码在iOS 8.2和8.1中工作得很好,而在8.3上却不起作用。

这是我使用的代码:

代码语言:javascript
复制
-(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的实现(对于这个问题唯一有用的方法):

代码语言:javascript
复制
  -(void)viewDidLoad {
  [super viewDidLoad];

  self.clearsSelectionOnViewWillAppear = NO;
  if (!_filterSetting) _filterSetting = [NSMutableDictionary new];
  [self setModalInPopover:NO];

  }

由于popover的内容有一个单独的故事板,所以我使用这个方法来创建它的一个实例。

代码语言:javascript
复制
  +(instancetype)nodeFilterController{
     return [[UIStoryboard storyboardWithName:@"NodeFilterStoryboard" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"NodeFilterController"];
  }

其他代表方法:

代码语言:javascript
复制
 -(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上一切都是完美的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-28 12:42:22

最后我发现了这个问题。

我仍然不知道为什么(因为在iOS < 8.3中完美地工作),但问题是,我试图在弹出窗口中显示的视图没有嵌入到导航控制器中。

如果你把所有的东西放在一个导航控制器内,它就完美地工作了!

这就是现在的代码:

代码语言:javascript
复制
    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];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29567857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档