Xcode:视图控制器和App Delegate之间的连接

时间:2011-07-03 02:35:50

标签: iphone objective-c xcode cocoa-touch ipad

这可能是一个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;

但似乎没有任何效果。

任何人都可以帮忙吗?

提前致谢

2 个答案:

答案 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