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上没有太多