2012-03-04 5 views
5

Я пытаюсь добавить контроллер View в класс Appdelegate. Мой код идет таким образом.Добавление ViewController в Appdelegate

[self.view addsubView:viewcontroller.view]; 

Но, к сожалению, я не могу просмотреть вид контроллера. Пожалуйста, предложите, если я буду ошибаться где-то. Спасибо за ур время.

Метод в AppdidFinishLaunching является: -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    // [self.window addSubview:videoController.view]; 
    self.window.rootViewController = videoController; 
    [self.window makeKeyAndVisible];  
    return YES; 
} 

и с точки зрения нагрузки на ViewController я написал, как

UIButton *playMovie = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
playMovie.frame = CGRectMake(70,30,100,50); 
[playMovie setTitle:@"Play Movie" forState:UIControlStateHighlighted]; 
[playMovie addTarget:self action:@selector(playMovie:) forControlEvents:UIControlEventTouchDown]; 
[self.view addSubview:playMovie]; 

Проблема здесь я не в состоянии увидеть кнопку и view.Please помощь.

ответ

9

Ни в коем случае не следует добавлять контроллер вида вручную к интерфейсу, подобному этому. Делегат приложения не является, сам, контроллером представления; так что viewcontroller не является его ребенком. Таким образом, взгляд не ваш. Правильно используйте контроллеры представлений: контроллер просмотра - это либо окно вашего приложения rootViewController, либо это какой-то другой дочерний контроллер контроллера, и в любом случае его представление автоматически помещается в интерфейс.

Если это представление предназначено для корневого представления приложения, то выполняйте то, что делают шаблоны проектов Xcode 4.2 (например, приложение Single View): создайте экземпляр контроллера представления и назначьте его как self.window.rootViewController. Если нет, вы не должны использовать контроллер представления, чтобы добавить его как подпункт, который вы пытаетесь сделать; просто получите представление и добавьте его, без промежуточного контроллера просмотра.

Это может помочь вам прочитать мою главу о контроллерах зрения: http://www.apeth.com/iOSBook/ch19.html

+0

описания, представленного выше, очень полезно. Спасибо за информацию. Но все же, когда я пытаюсь назначить диспетчер представлений для окна, я не могу просмотреть viewcontroller. Пожалуйста помоги. Я редактирую вопрос с помощью кода. Пожалуйста, дайте мне знать, если я ошибаюсь где-то ... –

+0

Вы говорите 'self.window.rootViewController = videoController', но я не вижу, что вы назначаете' videoController' значение; вы никогда не создаете экземпляр своего контроллера. Так что все нуль. У вас нет контроллера просмотра и нет представления, поэтому вы попадаете в белое окно. – matt

+0

Также ваш 'loadView' написан неправильно. Прочтите документацию (и связанную с ней главу)! В 'loadView' вы должны создать представление и присвоить его' self.view'. Место для добавления вещей в представление находится в 'viewDidLoad'. – matt

0

Попробуйте ниже это работает для меня,

SFRmbrVC *viewController=[[SFRmbrVC alloc]initWithNibName:@"SFRmbrVC" bundle:nil]; 
[self.window.rootViewController addChildViewController:viewController]; 
viewController.parentController = self.window.rootViewController; 
viewController.view.frame = self.window.rootViewController.view.frame; 
[self.window.rootViewController.view addSubview:viewController.view]; 
viewController.view.alpha = 0; 
[viewController didMoveToParentViewController:self.window.rootViewController]; 

[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^ 
{ 
    viewController.view.alpha = 1; 
} 
       completion:nil]; 
Смежные вопросы