2010-08-21 2 views
0

Я пишу библиотеку, которая будет использоваться разработчиками для iPhone (аналогично тому, как это реализовано OpenFeint), и я пытаюсь создать ViewController с ассоциированным XIB так, что я могу создать его экземпляр в моем коде сСоздание нового ViewController и xib для программного отображения (с addSubview)

SplashScreenViewController *splashScreenViewController = [[SplashScreenViewController alloc] init]; 
UIWindow *topApplicationWindow = [self getTopWindow]; 
[topApplicationWindow addSubview:splashScreenViewController.view]; 

Однако, в то время как это работает с простым управлением (UIButtons и т.д.), ничего не показывает, с моей SplashScreenViewController. SplashScreenViewController очень прост:

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 


@interface SplashScreenView : UIViewController { 
} 

@end 

и реализация пуста. В моем представлении XIB (SplashScreenView.xib) я попытался установить класс владельца файла SplashScreenViewController, который не работал, и я попробовал его так, как я это видел в OpenFeint, который должен добавить контроллер View в IB и сделайте основной UIView дочерним элементом и сделайте его класс SplashScreenViewController. Это также не работает (не отображается).

Мне интересно, есть ли у кого-то хорошая идея в отношении того, что мне может не хватать, или если кто-то может порекомендовать прохождение для создания новых ViewControllers так, как я пытаюсь.

Спасибо!

ответ

1

Try 2 вещи:

  1. Вызов initWithNibName не только инициализации. Возможно, OpenFeint, о котором вы говорили, переопределял init, чтобы вызвать initWithNibName, поэтому вы его не видите.

  2. Установите SplashScreenViewController в качестве владельца файла и подключите его розетку к вашему в IB.

Надеюсь, это поможет.

+0

'init' просто делает' initWithNibName: nil bundle: nil'. когда nibName равно nil, по умолчанию loadView использует имя класса (предположительно [[self class] description] или [self className]). –

+0

Это все еще может быть проблемой. Обратите внимание, что его xib называют его «SplashScreenView.xib», а его класс контроллера - «SplashScreenViewController». Я предполагаю, что он написал файл m неправильно, в противном случае я не знаю, почему SplashScreenView наследует UIViewController. – Idan

+0

Я переписал код, чтобы быть более применимым к этому вопросу, вместо использования имен, которые мне понадобятся для рефакторинга в моем проекте. Так да. имя XIB отличается от имени ViewController в реальной библиотеке. Извините за эту путаницу. Ваше предложение действительно работает. OpenFeint, похоже, делает это, не используя 'initWithNibName: bundle:', поэтому я буду держать этот вопрос открытым на время. Если кто-нибудь знает, как это сделать, не используя 'initWithNibName: bundle:', я проверю его как ответ. В противном случае я проверю это. – user426856

0

Вместо [splashScreenViewController alloc], попробуйте [SplashScreenViewController alloc]. Я удивлен, что вы не получили предупреждение о компиляторе.

+0

Я использовал некоторое креативность для чтения при вставке кода, и я опечатал инструкцию alloc. Фактически это [SplashScreenViewController alloc] в моем коде. сожалею – user426856