如何以模态方式呈现标准UIViewController

时间:2011-02-18 20:32:03

标签: iphone objective-c ios uiviewcontroller presentmodalviewcontroller

我试图以模态方式呈现标准ViewController,但无法弄清楚如何做到这一点。视图控制器将具有最终将触发解雇操作的按钮,因此我不需要将其包装在NavigationController中。另外,我正在以编程方式完成所有这些操作,没有.xibs。

这是我正在使用的代码:

- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"view did appear within rootviewcontroller");
    WelcomeViewController *welcome = [[WelcomeViewController alloc] init];
    [self presentModalViewController:welcome animated:true];
    [welcome release];
}

问题是我没有设置WelcomeViewController's视图,因此loadView没有运行,这意味着没有内容被绘制到屏幕上。

我找到的每个例子,包括Apple的,都使用.xib来初始化ViewController,使用添加RootViewController的NavigationController,或两者兼而有之。我的理解是在这两种情况下都会自动为您调用loadView。 http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/uid/TP40007457-CH111-SW3

我在哪里配置WelcomeViewController's视图?在alloc / init之后?在WelcomeViewController's init方法内部?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我在哪里配置WelcomeViewController的视图?

覆盖子类中的loadView方法。请参阅View Controller Programming Guide for iOS

答案 1 :(得分:1)

以下是一个简单的示例,说明如何在不使用NIB的情况下进行操作:

在AppDelegate didFinishLaunchingWithOptions:中,您创建自定义视图控制器的实例,并将其添加为窗口的子视图(非常标准)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    RootViewController *vc = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    [self.window addSubview:vc.view];
    [self.window makeKeyAndVisible];
    return YES;
}

创建vc实例时,使用指定的初始化程序,该初始化程序将在视图控制器的新实例上调用。您没有指定任何nib,因为您将在方法中进行自定义初始化:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self.view setBackgroundColor:[UIColor orangeColor]];
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [label setBackgroundColor:[UIColor clearColor]];
        [label setNumberOfLines:2];
        [label setText:@"This is the vc view with an\norange background and a label"];
        [label setTextColor:[UIColor whiteColor]];
        [label setTextAlignment:UITextAlignmentCenter];
        [self.view addSubview:label];
        [label release];
    }
    return self;
}