在AppDelegate中,我想创建一个UIViewController子类并添加它的视图。 viw本身将在代码中指定 - 没有笔尖。
根据苹果文档,我应该使用
initWithNibName:nil bundle:nil];
然后在控制器的loadView中,我添加了我的子视图等。
但是,下面的后续测试代码对我不起作用。我在Apple的PageControl demo上建模AppDelegate代码,仅仅是因为我的应用程序将实现类似的结构(特别是用于管理分页滚动视图的基本控制器,以及用于构建页面的其他控制器阵列)。
但我怀疑我的AppDelegate代码是问题,因为日志记录证明initWithNibName ::和loadView都会触发。下面的应用程序运行,但屏幕为空白。我期待带有标签的绿色视图。
的AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ScrollerController *controller = [[ScrollerController alloc] initWithNibName:nil bundle:nil];
[self.window addSubview:controller.view];
[self.window makeKeyAndVisible];
return YES;
}
ScrollerController (UIViewController子类)
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
contentView.backgroundColor = [UIColor greenColor];
self.view = contentView;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 100, 40)];
[label setText:@"Label created in ScrollerController.loadView"];
[self.view addSubview:label];
}
答案 0 :(得分:5)
尝试使用:
self.window.rootViewController = controller;
代替
[self.window addSubview:controller.view];
请注意,您还应该@synthesize window;
并创建它
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
答案 1 :(得分:4)
而不是initWithNibNamed:,只需使用alloc和init或任何其他指定的initalizer用于视图控制器。以下是project
的示例hoverViewController=[[BDHoverViewController alloc] initWithHoverStatusStyle:BDHoverViewStatusActivityProgressStyle];
self.window.rootViewController=hoverViewController;
[self.window makeKeyAndVisible];
另外,将根视图控制器添加到app delegate中的窗口的正确表单(现在无论如何)是这样的:
self.window.rootViewcontroller=controller;
[self.window makeKeyAndVisible];
您无需将视图添加到窗口。上面的代码自动完成。
祝你好运,Ť