Objective c 使用UITabBarController从presentingViewController调用方法

Objective c 使用UITabBarController从presentingViewController调用方法,objective-c,ios,uitabbarcontroller,Objective C,Ios,Uitabbarcontroller,我有一个控制器,我们把它叫做mainController,它属于我的UITabNarController中的一个选项卡按钮。现在,在mainController中,我加载了一个新的viewController,我们将其称为secondViewController,如下所示: UIStoryboard *storyboard = self.storyboard; secondViewController *svc = [storyboard instantiateViewControllerWit

我有一个控制器,我们把它叫做
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
响应?

似乎是因为主控制器没有设置为提供演示上下文,搜索会沿着层次结构向上,直到找到类似于UITabBarController的内容为止

在调用
presentViewController
之前,请尝试将
main控制器上的
definesPresentationContext
设置为YES。 如果没有帮助,请尝试将
modalPresentationStyle
设置为
UIModalPresentationCurrentContext

见以下文件:

一个布尔值,指示此视图控制器的视图是否为 当视图控制器或其子体之一显示 视图控制器

@属性(非原子,赋值)布尔定义表示上下文

讨论

当显示视图控制器时,iOS以 显示视图控制器并询问它是否要提供 演示上下文。如果显示视图控制器没有 提供上下文,然后iOS询问演示视图控制器的 父视图控制器。iOS通过视图控制器向上搜索 层次结构,直到视图控制器提供表示上下文。如果 没有视图控制器提供上下文,即窗口的根视图 控制器提供表示上下文

如果视图控制器返回YES,则它将提供一个演示文稿 上下文视图控制器所覆盖的窗口部分 视图确定显示的视图控制器视图的大小。这个 此属性的默认值为“否”


下面的输出是什么

NSLog(@"Presenting View controller: %@", [self.presentingViewController class]);
NSLog(@“显示视图控制器:%@,[self.presentingViewController类]) 这感觉有点粗糙,但您可以通过[(UITabBarController*)self.presentingViewController selectedViewController]获得对主控制器的引用。如果这不起作用,或者你不想这样做,那么使用委派就是一种方法。

Hmm
[((mainController*)self.presentingViewController)aMethod]仍在返回
UIDABBARCONTROLLER
请尝试将
modalPresentationStyle
设置为
UIModalPresentationCurrentContext
相同的问题。这很奇怪,因为我在做
[self presen…
这应该意味着
mainViewController
是presentingViewConroller。如果你想重新设计你的应用程序,想想为什么你需要在父视图
viewController
上做任何事情?如果它没有显示任何
视图,那么就不应该在那里做任何事情。如果你想升级日期然后你有一些方法,比如ViewWillDisplay,返回后会调用它。也许你应该将aMethod移动到某个模型,这样你就可以从任何
viewController
访问该方法。secondViewController允许用户从列表中选择项。我需要在viewController.im中的数组中添加/删除这些项我觉得从控制器父级调用一个方法应该是一个相当常见的任务,尽管在google上没有太多