这是我的问题:
我有3个不同的UIViewControllers
;
第一个是A,第二个是B,第三个是C.
A推送到B,然后我在ViewDidLoad
方法中做了一些事情。
C也有一个到B的segue然后i =我需要在ViewDidLoad
方法中做其他的事情。
有没有办法知道哪个UIViewController
A或C推到了B?
答案 0 :(得分:3)
你可以在B类的.h文件中拥有一个属性,如下所示:
@property (nonatomic) NSString *viewControllerName;
在A类和C类的-prepareForSegue:
方法中,您可以将viewControllerName
属性设置为等于A类的名称或C类的名称。
然后,在B类viewDidLoad
中进行简单的if-else检查可以帮助您相应地加载它。
示例B.h:
#import <UIKit/UIKit.h>
@interface B : UIViewController
@property (nonatomic) NSString *view;
@end
示例C.m或A.m
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
B *vc = [segue destinationViewController];
vc.view = @"C"; // Change to A if this is in A.m
}
答案 1 :(得分:1)
是的。在导航堆栈中,您将能够跟踪哪个视图推送了当前视图
NSArray * arr = [self.navigationController ViewControllers];
如果您打印他的数组,您将获得导航堆栈中所有viewCOntroller的回溯
答案 2 :(得分:1)
在B类的.m
中,我们可以调用它ViewController_B.m
#import "ViewController_A.h"
#import "ViewController_C.h"
//...
-(void)viewDidLoad
{
//...
NSArray *arrViewControllers = self.navigationController.viewControllers;
if (arrViewControllers.count <= 1) { //not needed but just incase, maybe?
NSLog(@"No parent");
return;
}
id vcCurrent = arrViewControllers[arrViewControllers.count-2];
if ([vcCurrent isKindOfClass:[ViewController_A class]]) {
NSLog(@"Pushed by A");
//Do class A specific things
}
else if ([vcCurrent isKindOfClass:[ViewController_C class]]) {
NSLog(@"Pushed by C");
//Do class C specific things
}
}