使用UITabBarController从presentsViewController调用方法

时间:2012-10-25 21:41:48

标签: objective-c ios uitabbarcontroller

我有一个控制器,我们称之为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

3 个答案:

答案 0 :(得分:2)

这感觉有点hackish但你可以用[(UITabBarController *)self.presentingViewController selectedViewController]获得对你的mainController的引用。如果这不起作用,或者你不想那样做,那么使用委托是可行的方法。

答案 1 :(得分:0)

似乎是因为你的mainController没有设置为提供表示上下文,搜索上层次,直到它找到像提供它的UITabBarController之类的东西。

在致电definesPresentationContext之前,尝试在mainController上设置presentViewController为YES。 如果这样做也无法尝试将modalPresentationStyle设置为UIModalPresentationCurrentContext

请参阅以下文档:

  

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

     

@property(nonatomic,assign)BOOL definitionsPresentationContext

     

讨论

     

当呈现视图控制器时,iOS将以   呈现视图控制器并询问它是否要提供   演示文稿背景如果呈现视图控制器没有   提供上下文,然后iOS询问呈现视图控制器   父视图控制器。 iOS通过视图控制器进行搜索   层次结构,直到视图控制器提供表示上下文。如果   没有视图控制器提供提供上下文,窗口的根视图   controller提供演示文稿上下文。

     

如果视图控制器返回YES,则它提供演示   上下文。窗口的一部分由视图控制器覆盖   view确定显示的视图控制器视图的大小。该   此属性的默认值为NO。

答案 2 :(得分:0)

以下是什么输出?

NSLog(@"Presenting View controller: %@", [self.presentingViewController class]);