2

我有一个控制器,让我们称它mainController属于我的UITabNarController. 现在,在内部mainController,我加载了一个新的 viewController,让我们secondViewController这样称呼它:

UIStoryboard *storyboard = self.storyboard;
secondViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
[self presentViewController:svc animated:YES completion:nil];

哪个工作正常。但是在内部secondViewController,我希望从 调用一个方法mainController,如下所示:

 [((mainController*)self.presentingViewController) aMethod];

过去,我从来没有使用过 UITabBarController,这很好用。但是,现在我得到一个错误

[UITabBarController aMethod:]: unrecognized selector sent to instance 

为什么presentingViewController用 回应UITabBarController

4

3 回答 3

2

这感觉有点骇人听闻,但您可以使用 [(UITabBarController *)self.presentingViewController selectedViewController] 获得对 mainController 的引用。如果这不起作用,或者您不想那样做,那么使用委托就是要走的路。

于 2012-10-26T06:34:06.370 回答
0

似乎是因为您的 mainController 没有设置为提供演示上下文,并且搜索会沿着层次结构上升,直到找到提供它的 UITabBarController 之类的东西。

在调用之前尝试将definesPresentationContext您的设置为 YES 。如果那没有帮助,请尝试设置为mainControllerpresentViewControllermodalPresentationStyleUIModalPresentationCurrentContext

请参阅以下文档:

一个布尔值,指示当视图控制器或其后代之一呈现视图控制器时是否覆盖此视图控制器的视图。

@property(nonatomic, assign) BOOL 定义PresentationContext

讨论

当一个视图控制器被呈现时,iOS 从呈现视图控制器开始并询问它是否想要提供呈现上下文。如果呈现视图控制器不提供上下文,则 iOS 会询问呈现视图控制器的父视图控制器。iOS 向上搜索视图控制器层次结构,直到视图控制器提供表示上下文。如果没有视图控制器提供上下文,则窗口的根视图控制器提供表示上下文。

如果视图控制器返回 YES,那么它会提供一个表示上下文。由视图控制器的视图覆盖的窗口部分决定了呈现的视图控制器视图的大小。此属性的默认值为 NO。

于 2012-10-25T22:21:36.270 回答
0

下面的输出是什么?

NSLog(@"呈现视图控制器:%@", [self.presentingViewController 类]);
于 2012-10-25T22:29:53.470 回答