У меня такой код:

- (IBAction)buttonPressed:(UIButton *)sender
{
    //sentder.titleLabel
    NSString *label = [(UIButton *)sender currentTitle];

    if ([label isEqualToString:@"Register"])
    {
        [sender setTitle:@"Registers" forState:UIControlStateNormal];

        RegisterViewController *viewCon = [[RegisterViewController alloc] init];
        RegisterNavigationController *navigation = [[RegisterNavigationController alloc] init];
    [navigation pushViewController:viewCon animated:YES];

        //self performSegueWithIdentifier:@"MySequeIdentifier" sender:];
    }
....

У меня есть startController со следующим кодом кнопки, который вызывается правильно. Я создал новый по умолчанию registerViewController (UIViewController) и registerNavigationContoller (класс UINavigationController). Как мне сделать так, чтобы моя кнопка была анимирована в registerViewController и чтобы у этого контроллера представления была панель с кнопкой возврата?

Я делаю это неправильно, должен ли startViewController быть UINavigationController, поскольку это просто UIViewController? Если да, то как мне избавиться от верхней панели на этой странице?

0
cdub 13 Сен 2013 в 12:13
Вы создаете контроллер навигации и никогда не добавляете его в основной viewController. Сделайте свой основной ViewController как NavigationViewController, а затем используйте на нем pushViewController.
 – 
Grzegorz Krukowski
13 Сен 2013 в 12:15

1 ответ

Лучший ответ

Существующий контроллер представления (тот, который содержит этот код кнопки) должен содержаться в контроллере навигации. Новый VC также будет содержаться в том же контроллере навигации. Контроллер Nav управляет строкой заголовка и навигацией по кнопке «Назад» между этими двумя дочерними контроллерами представления.

Чтобы встроить первый виртуальный канал в навигационный контроллер:

  • при использовании раскадровки вы можете выбрать сцену контроллера представления, а затем в меню: Editor > Embed In > Navigation Controller

  • при создании экземпляра в коде сначала инициализируйте контроллер представления, а затем вставьте его в новый контроллер навигации, таким образом:

    UIViewController firstVC;
    firstVC = [[UIViewController alloc] initWithNib:@"nibname" bundle:nil]]   
        //(example of initialising with a xib/nib file)
    UINavigationCOntroller navCon;
    navCon = [UINavigationController alloc] initWithRootViewController:firstVC];
    

    navController

Теперь из кода кнопки вы просите родительский контроллер навигации управлять переходом:

 RegisterViewController *viewCon = [[RegisterViewController alloc] init];  
    //take care to initialise correctly
    //do you have a nib file? a storyboard scene?
[self.navigationController pushViewController:viewCon animated:YES];

В качестве альтернативы вы можете создать переход между кнопкой и второй сценой раскадровки, который выполняет ту же функцию, что и этот код.

Если вам нужна панель навигации только во втором VC, а не в первом, у вас есть различные варианты.

С каждым из ваших контроллеров представления вы можете отдельно управлять свойством BOOL контроллера навигации navigationBarHidden - например, self.navigationController.navigationBarHidden = YES;

Но вы можете найти визуальный переход между состояниями навигационной панели неудовлетворительным и, возможно, захотите рассмотреть альтернативный дизайн приложения. Например, вы можете представить второй контроллер представления из первого. В этом случае ни один виртуальный компьютер не нуждается в контроллере навигации (вместо этого ваш второй виртуальный компьютер может содержать собственный UINavigationBar). Или представленный контроллер представления все еще может быть встроен в собственный контроллер навигации. В любом случае вы не получите автоматическую кнопку возврата к первому контроллеру представления, и вам нужно будет реализовать свою собственную (кнопки возврата предоставляются только тогда, когда один контроллер навигации управляет массивом контроллеров дочерних представлений).

Это всего лишь несколько предложений, вам придется поэкспериментировать с этими и другими идеями, чтобы понять, что лучше всего подходит для вашего приложения.

1
foundry 14 Сен 2013 в 02:29
Есть ли способ избавиться от строки заголовка на первом встроенном контроллере представления? Просто любопытно.
 – 
cdub
14 Сен 2013 в 00:06
1
@chris, см. мой расширенный ответ.
 – 
foundry
14 Сен 2013 в 02:29