gpt4 book ai didi

iphone - 获取推送可见 View Controller 的 View Controller

转载 作者:行者123 更新时间:2023-12-03 18:36:11 24 4
gpt4 key购买 nike

我有一个应用程序,它有一个 UINavigationController,它将 UITabBarController 推送到 View 中。此 UITabBarController 有四个选项卡,其中一个显示自定义 UIViewController,它是 EventInformationViewController 的一个实例。此自定义 View Controller 中的按钮又将另一个自定义 View Controller EventRatingAddViewController 推送到 View 中。此 View Controller 中的操作应调用 EventInformationViewController 实例中的方法。以下代码会使应用程序崩溃:

// get the index of the visible VC on the stack
int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController];
// get a reference to the previous VC
EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1];
[prevVC performSelector:@selector(rateCurrentEvent:)];

我认为 viewControllers 属性在导航堆栈上保留了所有 VC 的数组,因此当前可见的索引一减一应该指向将当前可见的 VC 插入 View 的 VC。相反,它似乎指向我的 UITabBarController:

-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance

这是怎么回事,更重要的是,我如何获得指向将当前可见 VC 插入 View 的 VC 的指针?

编辑:我最终为 EventRatingAddViewController 创建了委托(delegate)协议(protocol),并将 EventInformationViewController 指定为委托(delegate)。这很有效 - 我仍然认为应该有一种方法可以通过导航堆栈访问推送 VC。

最佳答案

我很确定 UITabBarController 确实推送了您当前的 View Controller ,但您正在寻找的是此 UITabBarController 之一的 View Controller ' s 选项卡,当此 UITabBarController 将 View Controller 推送到导航堆栈时,在 UITabBarController 中可见的 View Controller 。可能这个UITabBarController将你的 View Controller 推送到堆栈上,因为可见选项卡的 View Controller 告诉它这样做,所以它会是这样的:[self.tabBarController.navigationController PushViewController :som​​eViewController];.

当你的 View Controller 被插入堆栈时,要找出UITabBarController中显示的 View Controller 的方法是使用.selectedViewController属性,所以这会导致这样的结果:

// get the index of the visible VC on the stack
int currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];
// get a reference to the previous VC
UITabBarController *prevVC = (UITabBarController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex - 1];
// get the VC shown by the previous VC
EventInformationViewController *prevShownVC = (EventInformationViewController *)prevVC.selectedViewController;
[prevShownVC performSelector:@selector(rateCurrentEvent:)];

关于iphone - 获取推送可见 View Controller 的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com