presentingViewController 总是得到 UITabBarController
Posted
技术标签:
【中文标题】presentingViewController 总是得到 UITabBarController【英文标题】:presentingViewController getting always UITabBarController 【发布时间】:2012-06-06 03:17:53 【问题描述】:我只是添加了 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];
【问题讨论】:
你需要在调用presentingViewController的地方添加一些代码。 看看这个 - ***.com/questions/8437908/… 是的,这是我同样的问题,但我之前读过,但不知道如何解决问题 似乎你有一个丑陋的解决方案,但我建议你检查你的导航堆栈层次结构,然后它会让你清楚地知道你需要获取什么。 您得到的解决方案没有错,考虑到您在视图控制器上的设计,它适用于您的情况。 【参考方案1】:我来自this question的回答的副本
来自Programming ios 6, by Matt Neuburg:
在 iPad 上,当呈现视图控制器的 modalPresentationStyle 是 UIModalPresentationCurrentContext 时,必须决定哪个视图控制器应该是呈现视图控制器的presentingViewController。这将确定哪个视图将被呈现的视图控制器的视图替换。这个决定涉及另一个 UIViewController 属性,definePresentationContext (a BOOL)。从 presentViewController:animated:completion: 被发送到的视图控制器开始,我们沿着父视图控制器链遍历,寻找其定义PresentationContext 属性为 YES 的视图控制器。如果我们找到一个,那就是那个;它将是presentingViewController,并且它的视图将被呈现的视图控制器的视图替换。如果我们没有找到,事情就像呈现的视图控制器的 modalPresentationStyle 是 UIModalPresentationFullScreen。
TL;DR
1.在所需的presentingViewController
上将definesPresentationContext
设置为true
2.在想要的presentedViewController
上设置modalPresentationStyle
为UIModalPresentationCurrentContext
【讨论】:
以上是关于presentingViewController 总是得到 UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章
presentingViewController 总是得到 UITabBarController
presentingViewController 显示为 null
为啥解散presentingViewController,只解散子控制器?