在我的应用程序中,用户可以按下一个表格视图单元格,这将显示一个带有按钮的弹出窗口。按下此按钮将呈现一个导航视图控制器。
DNWInfoViewController *infoViewController = [[DNWInfoViewController alloc] initWithInfoText:infoText];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:infoViewController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];
但是自从iOS 8以后,我收到了这个警告,视图没有显示出来:
Warning: Attempt to present <UINavigationController: 0x180e1dc0> on <ANProjectFilterViewController: 0x16ec5cf0> which is already presenting (null)
这可能是因为弹出控制器还在显示,所以在呈现视图之前我尝试了这个。
[_ppvrController dismissPopoverAnimated:YES]; // This will not call the delegate
这种“修复”方法有时候有效,但大多数情况下仍然会显示警告而不是我的视图。我尝试手动调用代理,但结果相同。
这在iOS 7及以下版本中曾经很好用。如何在iOS 8中从弹出窗口呈现新视图?
编辑1
我发现
dismissPopoverAnimated
由于某些原因,在iOS 8中无法正常工作。通常,当用户从弹出窗口中选择一个项目时,会调用一个方法,该方法首先关闭弹出窗口,然后执行一些自定义操作。在iOS 7中,选择后弹出窗口会消失,但在iOS 8中不会消失。 编辑2 实际上触发警告的是这段代码:
[_ppvrController dismissPopoverAnimated:YES];
这段代码位于一个方法内部。该方法从一个放置在弹出式窗口中的按钮中调用。有一半的时间,弹出式窗口可以成功地消失,但有时它只会打印警告并保持可见。
注意:此方法内没有其他代码。只有一行代码用于关闭弹出式窗口。
double delayInSeconds = 0.01; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [self presentViewController:yourNewNavigationController animated:YES completion:nil]; });
- Ricardo Sanchez-SaezUIActivityController
可以呈现许多其他控制器。 - yasirmturk