11

我只是添加 TabBarController + NavigationController。在此之前一切正常,但现在当我从模式调用 presentingViewController 时,出现此错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITabBarController tableViewListado]:无法识别的选择器发送到实例

我得到的是“UITabBarController”,而不是接收预期的对象(ViewController),我应该在使用 TabBar 和 Nav 控制器时以某种不同的方式获取呈现控制器吗?

没有 TabBar/Nav 我使用的是这个:

ViewController *parentView = (ViewController *)[self presentingViewController]; 

[parentView something];

编辑:

只要发现如果我这样做它就可以工作,但不要认为这实际上是最好的方法:

ViewController *parentView = (ViewController *)[(UINavigationController *)[((UITabBarController *)[self presentingViewController] ) selectedViewController] topViewController]  ;

[parentView something];
4

1 回答 1

7

我对这个问题的回答的副本

Programming iOS 6, by Matt Neuburg

在 iPad 上,当呈现的视图控制器的 modalPresentationStyle 是 UIModalPresentationCurrentContext 时,必须决定哪个视图控制器应该是呈现的视图控制器的presentingViewController。这将确定哪个视图将被呈现的视图控制器的视图替换。这个决定涉及另一个 UIViewController 属性,definePresentationContext (a BOOL)。从 presentViewController:animated:completion: 被发送到的视图控制器开始,我们沿着父视图控制器链查找其定义PresentationContext 属性为 YES 的视图控制器。如果我们找到一个,那就是那个;它将是presentingViewController,并且它的视图将被呈现的视图控制器的视图替换。如果我们没有找到,

TL;DR
1. 将所需设置definesPresentationContext为真presentingViewController
2. 设置modalPresentationStyleUIModalPresentationCurrentContext所需presentedViewController

于 2014-10-03T20:20:26.910 回答