这可能是一个noob问题,但无法理解它。
如何在2个视图控制器或视图控制器与我的appdelegate之间建立连接? 我通常做的是将以下内容添加到我的应用代表“h”文件
@class RootViewController;
@interface TabBarWithSplitViewAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
RootViewController *rootViewController;
}
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
@end
然后在Interface Builder中创建连接。从我的根视图控制器到应用程序委托,并自动告诉我那是我上面添加的rootViewController。
如果您在app委托“m”文件中执行此操作:
#import "RootViewController.h"
NSLOG(@"Controller %@",rootViewController);
它会给你一堆数字,表明有连接
但是你知道xcode 4已经改变了,因为你通常不再拥有可以创建连接的main.xib,你可以用编程方式完成所有这些连接。
我尝试了从使用不带“IBOutlet”的相同代码到添加:
的所有内容rootViewController = [[RootViewController]alloc] init;
但似乎没有任何效果。
任何人都可以帮忙吗?
提前致谢
答案 0 :(得分:16)
您基本上想要在应用代理中创建视图控制器的ivar。
ViewController *myVC;
@property (nonatomic, retain) IBOutlet ViewController *myVC;
然后在实现文件中合成它。
然后当视图控制器加载时,调用以下内容:
- (void)viewDidLoad {
AppDelegateClass *appDelegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate];
appDelegate.myVC = self;
}
此时,您现在可以从应用程序委托直接连接到视图控制器。同样,您也可以从视图控制器调用app delegate方法。在这种情况下,您将在视图控制器的标题中设置一个委托。
id delegate;
@property (nonatomic, assign) id delegate;
再次在实现文件中合成它。
现在当你在viewDidLoad
时,你会打电话给这样的话:
- (void)viewDidLoad {
self.delegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate];
}
那应该会给你你需要的东西,所以我希望有帮助
答案 1 :(得分:1)
您可以使用XCode 4中的界面构建器执行此操作。我已经制作了一个关于如何执行此操作的简短视频: http://www.youtube.com/watch?v=6VOQMBoyqbA