Я пишу библиотеку, которая будет использоваться разработчиками для 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 так, как я пытаюсь.
Спасибо!
'init' просто делает' initWithNibName: nil bundle: nil'. когда nibName равно nil, по умолчанию loadView использует имя класса (предположительно [[self class] description] или [self className]). –
Это все еще может быть проблемой. Обратите внимание, что его xib называют его «SplashScreenView.xib», а его класс контроллера - «SplashScreenViewController». Я предполагаю, что он написал файл m неправильно, в противном случае я не знаю, почему SplashScreenView наследует UIViewController. – Idan
Я переписал код, чтобы быть более применимым к этому вопросу, вместо использования имен, которые мне понадобятся для рефакторинга в моем проекте. Так да. имя XIB отличается от имени ViewController в реальной библиотеке. Извините за эту путаницу. Ваше предложение действительно работает. OpenFeint, похоже, делает это, не используя 'initWithNibName: bundle:', поэтому я буду держать этот вопрос открытым на время. Если кто-нибудь знает, как это сделать, не используя 'initWithNibName: bundle:', я проверю его как ответ. В противном случае я проверю это. – user426856