Как представить стандартный UIViewController модально - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь представить стандарт 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 view, так что loadView не запускается, что означает, что контент не выводится на экран.

Каждый найденный мной пример, включая Apple, использует либо .xib для инициализации ViewController, NavigationController, который добавляетRootViewController или оба.Насколько я понимаю, 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 метод инициализации?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Где я могу настроить представление моего WelcomeViewController?

Переопределить метод loadView в вашем подклассе.См. View Руководство по программированию контроллера для iOS .

1 голос
/ 18 февраля 2011

Вот простой пример того, как вы можете это сделать, не используя 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 вы используете назначенный инициализатор, который будет вызываться на новом экземпляре контроллера представления. Вы не указываете ни одно перо, потому что вы будете выполнять свою пользовательскую инициализацию внутри метода:

- (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;
}
...