Iphone UITabBarController作为其子视图控制器的代理
我目前有一个故事板,其中有一个子类UITabBarController链接到3个视图控制器。 这些视图控制器是UIViewController的自定义子类,我添加了一个“委托”属性,因为我需要从主视图控制器(从.plist文件检索)访问属性(设置)。 它是一个设置类,处理从此文件的读写操作 无论如何,我还没有找到如何从IB设置其委托属性,因此我在代码中添加了以下内容:Iphone UITabBarController作为其子视图控制器的代理,iphone,objective-c,delegates,interface-builder,Iphone,Objective C,Delegates,Interface Builder,我目前有一个故事板,其中有一个子类UITabBarController链接到3个视图控制器。 这些视图控制器是UIViewController的自定义子类,我添加了一个“委托”属性,因为我需要从主视图控制器(从.plist文件检索)访问属性(设置)。 它是一个设置类,处理从此文件的读写操作 无论如何,我还没有找到如何从IB设置其委托属性,因此我在代码中添加了以下内容: - (void)viewDidLoad { [super viewDidLoad]; /* Fetch set
- (void)viewDidLoad
{
[super viewDidLoad];
/* Fetch settings */
NSString* settingsPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"plist"]; // Load settings from file
settings = [[Settings alloc] initWithContentOfFile:settingsPath];
for (UIViewController<HasDelegate> *c in [self viewControllers]) {
c.delegate = self;
}
}
-(void)viewDidLoad
{
[超级视图下载];
/*获取设置*/
NSString*settingsPath=[[NSBundle mainBundle]pathForResource:@“设置”的类型:@“plist”];//从文件加载设置
设置=[[settings alloc]initWithContentOfFile:settingsPath];
用于(UIViewController*c在[self-viewControllers]中){
c、 代表=自我;
}
}
但只有第一视图控制器(启动应用程序时显示的控制器)可以访问它。
另一个具有委托属性的nil指针
这样做对吗?
我遗漏了什么?不管怎样,我访问的是UINavigationController,而不是它的rootViewController。我补充说:
if([c isKindOfClass:[UINavigationController class]]) {
NSLog(@"UINavigationController");
UINavigationController *navC = (UINavigationController*)c;
[[[navC viewControllers] objectAtIndex:0] setDelegate:self];
}
它就像一个符咒 当你在
[self viewControllers]
中进行迭代时,你是真的得到了所有3个视图控制器,还是只得到了一个?实际上,我似乎检索到了每个视图控制器。我添加了NSLog(@“%@”,c.title)代码>并打印它们。我可以重读c.delegate
,它指向self
。但是,当我检查c
的地址时,它与我在第二和第三视图控制器的loadView
中的地址不一样。在选项卡栏控制器中的VCs之间转换时,你会做什么奇怪的事吗?或者您只是使用本机标准行为还是使用本机行为,我只需点击模拟器上的选项卡。