调用父视图控制器(通过导航控制器)
目前我使用pushViewController:animated:
添加一个viewcontroller pushViewController:animated:
现在从那个新的一个想要在我的“父母”控制器内调用一个方法。 我想我被困在navigationcontroller。
目前试图看看是否是我想要的控制器:
if([self.superclass isKindOfClass:[MySuperController class]]) // and tried: if([self.presentingViewController isKindOfClass:[MySuperController class]])
这两个都没有工作。
如何访问推送当前控制器的控制器(一种方法)?
就像马森提到的,你需要使用委托…
这是一个示例:
在您的子视图控制器.h文件中:
@protocol ChildViewControllerDelegate <NSObject> - (void)parentMethodThatChildCanCall; @end @interface ChildViewController : UIViewController { } @property (assign) id <ChildViewControllerDelegate> delegate;
在您的子视图控制器.m文件中:
@implementation ChildViewController @synthesize delegate; // to call parent method: // [self.delegate parentMethodThatChildCanCall];
在父视图控制器.h文件中:
@interface parentViewController <ChildViewControllerDelegate>
在父视图控制器.m文件中:
//after create instant of your ChildViewController childViewController.delegate = self; - (void) parentMethodThatChildCanCall { //do thing }
self.navigationController.viewControllers
返回导航堆栈中所有视图控制器的数组。 当前视图控制器位于堆栈的顶部,前一个视图控制器是下一个视图控制器,依此类推。
所以,你可以做到以下几点:
NSArray *viewControllers = self.navigationController.viewControllers; int count = [viewControllers count]; id previousController = [viewControllers objectAtIndex:count - 2]; if ([previousController respondsToSelector:@selector(myMethod)]) [previousController myMethod];
如果你知道以前的控制器是什么类的,你可以使用id而不是id。
不确定你的应用程序逻辑,但你总是可以做到这一点。
在你的“孩子”控制器中,声明父types控制器的属性。 所以,在你的.h文件中:
MySuperController *superController; property(nonatomic, retain)MysuperController *superController;
并在您的.m文件中:
@synthesize superController;
在“推”你的孩子控制器之前:
MyChildController *child = ... [child setSuperController:self]; [self.navigationController pushViewController:child animated:YES];
然后在你的孩子控制器,你可以简单地访问你的超级
[this.superController myMethod:param];
我不会主张这种编码方式,但它是一种快速/廉价/肮脏的方式来完成的事情。
- 当UISearchBar处于活动状态时,UITableView内容与状态栏重叠
- 检查是否有多个文本框是空的 – 用Swift的iOS
- iOS – 更改UIBarButtonItem的高度
- 我怎样才能以编程方式设置选定的UITabBarController选项卡,同时也触发UITabBarControllerDelegate中的shouldSelectViewController
- 应用程序被拒绝,以跟踪用户不更新订阅
- iOS发布失败,没有错误logging
- 你的应用程序委托集和谁初始化其窗口和viewController属性?
- 检索函数数据
- 如何使用kciFormatRGBAh获得与Core Image iOS的一半浮动?