我试图以模态方式呈现标准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方法内部?
谢谢!
答案 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;
}