У меня такой код:
- (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? Если да, то как мне избавиться от верхней панели на этой странице?
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). Или представленный контроллер представления все еще может быть встроен в собственный контроллер навигации. В любом случае вы не получите автоматическую кнопку возврата к первому контроллеру представления, и вам нужно будет реализовать свою собственную (кнопки возврата предоставляются только тогда, когда один контроллер навигации управляет массивом контроллеров дочерних представлений).
Это всего лишь несколько предложений, вам придется поэкспериментировать с этими и другими идеями, чтобы понять, что лучше всего подходит для вашего приложения.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.