以编程方式将UIButton添加到rootview,我做错了什么?

时间:2011-09-23 12:53:02

标签: ios uiview uiviewcontroller uikit uibutton

我有新设置的应用程序,只有一个窗口和一个根视图(来自iOS单视图应用程序模板,由XCode提供)。

现在我尝试添加一个按钮。

相应的代码如下所示:

- (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UIButton* button0 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button0.frame = CGRectMake(140, 230, 40, 20);
    [button0 setTitle:@"Exit" forState:UIControlStateNormal];
    [button0 addTarget:self action:@selector(action) forControlEvents:UIControlEventTouchUpInside];
    [self.viewController.view addSubview:button0];

    if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    else
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

当我启动应用程序时,我只能看到空视图。

但是,当注释掉该行时,将该视图作为root添加到窗口,而是直接将按钮添加到窗口,然后我就可以看到该按钮了。

那么为什么这不符合这个观点呢?

2 个答案:

答案 0 :(得分:1)

问题在于,即使在分配 viewController 之前,您也将 button0 添加为 self.viewController.view 的子视图。

当您调用 addSubview:方法时, self.viewController nil 。因此,该按钮未添加到 viewController 。您应该在分配 viewController 之后添加按钮。

self.viewController = [[ViewController alloc]...
[self.viewController.view addSubview:button0];

答案 1 :(得分:0)

首先,创建根视图控制器,稍后向其添加子视图。你反过来做了。