UIViewController вопрос для iPhone / iPad - PullRequest
0 голосов
/ 16 мая 2011

У меня есть приложение с одним файлом MainWindow.xib. Тогда у меня есть ViewControllerA.xib и ViewControllerB.xib. Мой MainWindow.xib имеет один ViewController, который указывает на два ViewControllerA.xib.

В ViewControllerA у меня есть кнопка, и я хотел бы, чтобы при нажатии кнопки она перемещала ViewControllerB на экран. Как мне это сделать?

Я попробовал этот код, но мне кажется, что я что-то упустил:

- (IBAction)btMyButton:(id)sender
{
    ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
    [[UIApplication sharedApplication].keyWindow addSubview:viewController.view];
    [self.navigationController pushViewController:viewController animated:YES];
}

Мой ViewControllerB действительно появляется, но он находится в верхней части экрана, поверх предыдущего представления. Любая помощь с благодарностью.

Спасибо

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Удалить вторую строку:

[[UIApplication sharedApplication].keyWindow addSubview:viewController.view];

Вы добавляете представление дважды. Во 2-й и 3-й строках представление добавляется в иерархию представлений в разных местах.

- update-- Если вы удалите 2-ю строку и не видите свое представление, то self.navigationController, скорее всего, будет нулевым. Попробуйте вместо этого [self presentModalViewController:].

0 голосов
/ 16 мая 2011

вам нужно будет удалить старый viewcontroller из основных окон.

- (IBAction)btMyButton:(id)sender
{

//Assuming you declare two Iboutlet controllerA, controllerB mapping with that view as class variable
{
if (self.controllerB == nil)
{
    ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
    self.controllerB = viewController;
[viewController release];
}
[controllerA.view removeFromSuperview];
[self.view insertSubview:controllerB.view atIndex:0];
}

}
0 голосов
/ 16 мая 2011

Убедитесь, что вид контроллера B имеет правильную высоту, вы должны вычесть высоту панели навигации 44 px и строку состояния 20 px. Эти значения для iPhone.

  - (IBAction)btMyButton:(id)sender
    {
        //you should load from the main app bundle
        ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:[NSBundle mainBundle]];
        // you don't need the following line      
        //[[UIApplication sharedApplication].keyWindow addSubview:viewController.view];
        [self.navigationController pushViewController:viewController animated:YES];
        [viewController release];
    }

Обновление Как сказано в приведенном выше комментарии, если у вас нет навигационного контроллера, в который можно вставить контроллер B. Поэтому добавьте контроллер навигации в главное окно вместо контроллера представления и сделайте его корневой контроллер представления вашим контроллером A.

Надеюсь, это вам поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...