Xcode: соединение между контроллерами представления и делегатом приложения - PullRequest
8 голосов
/ 03 июля 2011

Это, вероятно, вопрос noob, но я не могу обойти его.

Как мне установить соединение между двумя контроллерами представления или контроллером представления и моим appdelegate?что я обычно делаю, это добавляю следующее в файл h моего делегата приложения

@class RootViewController;


@interface TabBarWithSplitViewAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    RootViewController *rootViewController;



}
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;

@end

и затем создаю соединение в Интерфейсном Разработчике.из моего корневого контроллера представления делегату приложения и автоматически сообщает мне, что это rootViewController, который я добавил выше.

, и если вы делаете это в файле m делегата приложения:

#import "RootViewController.h"

NSLOG(@"Controller %@",rootViewController);

он дает вам кучу цифр, указывающих на наличие соединения

Но, как вы знаете, в xcode 4 это изменилось, поскольку у вас больше нет main.xib, где вы можете создать соединение, вы делаете почти все этисоединения программно.

Я попробовал все, от использования одного и того же кода без «IBOutlet» до добавления:

rootViewController = [[RootViewController]alloc] init;

, но, похоже, ничего не работает.

может кто угоднопомочь?

Заранее спасибо

Ответы [ 2 ]

16 голосов
/ 03 июля 2011

В основном вы захотите создать ivar вашего контроллера представления в делегате приложения.

ViewController *myVC;
@property (nonatomic, retain) IBOutlet ViewController *myVC;

и затем синтезировать его в файле реализации.

Затем, когда загрузится контроллер представления,вызовите что-нибудь вроде этого:

- (void)viewDidLoad {
    AppDelegateClass *appDelegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate];
    appDelegate.myVC = self;
}

Теперь у вас есть прямое соединение с вашим контроллером представления из делегата приложения.Точно так же вы можете сделать обратное, чтобы вызвать методы делегата приложения из контроллера представления.В этом случае вы бы настроили делегата в заголовке контроллера представления.

id delegate;
@property (nonatomic, assign) id delegate;

, снова синтезируя его в файле реализации.

Теперь, когда вы находитесь в viewDidLoad, выЯ бы назвал что-то вроде этого:

- (void)viewDidLoad {
    self.delegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate];
}

Это должно дать вам то, что вам нужно, чтобы начать работу, поэтому я надеюсь, что это поможет

1 голос
/ 27 августа 2011

Вы можете сделать это с помощью построителя интерфейса в XCode 4. Я сделал небольшое видео о том, как это сделать: http://www.youtube.com/watch?v=6VOQMBoyqbA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...