我有一个控制器,我们称之为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
?
答案 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]);