Контроллер навигации по раскадровке и контроллер панели вкладок
Я пытаюсь получить следующую настройку в Storyboard.
![Storyboard]()
Где у меня есть представление таблицы в начале, и когда я нажимаю на ячейку, ему нужно перейти к контроллеру панели вкладок, который работает. Но теперь я хочу заголовок и дополнительную кнопку панели навигации в двух наиболее правильных контроллерах.
Но я не могу перетащить кнопку туда или при настройке названия, ничего не появляется. Как я могу достичь этой настройки в раскадровке?
изменить:
Обновленный вопрос, основанный на ответе ниже.
![New setup]()
Когда у меня есть эта новая настройка (при этом с дополнительным контроллером навигации между ними), я могу установить заголовок в раскадровке, но при запуске приложения добавленный заголовок не отображается.
edit: У меня загружен проект xcode именно с этой настройкой. Возможно, это может пригодиться.
Ответы
Ответ 1
Для изменения заголовка UINavigationBar
(без необходимости создавать 2 других UINavigationController
) вы можете просто использовать
[self.parentViewController.navigationItem setTitle:@"Title"];
и для добавления правой кнопки используйте
self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];
on viewDidLoad
для каждого UIViewController
, на который ссылается ваш UITabBarController
.
Если вы хотите работать с "структурами навигации" внутри вашего UIViewController
от TabItems
, чтобы вы могли отредактировать BUFViewController.m:
#import "BUFViewController.h"
@interface BUFViewController ()
@end
@implementation BUFViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.parentViewController.navigationController setNavigationBarHidden:YES];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
}
-(void)done{
[self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Вы должны думать, что ваш UITabBarController
находится внутри родительского NavigationController
, поэтому вы хотите скрыть родительский UINavigationBar
и показать свой.
После этого вы сможете вернуться в свою таблицу, используя popToRootViewControllerAnimated
: на родительском UINavigationController
.
Надеюсь, что помогает:)
Ответ 2
На всякий случай кто-то искал быстрый подход:
tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")
Код лучше всего помещается в viewDidAppear
или viewWillAppear
, чтобы название и кнопка менялись при нажатии различных вкладок.
Вам также не понадобятся дополнительные навигационные контроллеры с таким подходом.
Ответ 3
Я посмотрел ваше тестовое приложение, и я вижу заголовок, очень слабо, под панелью навигации. Вы можете видеть обе панели навигации, если вы выберете контроллер панели вкладок, и снимите флажок "Под верхними барами". Однако это дает вам странную тень на панели навигации. Я не знаю, есть ли простой способ исправить это, но я не думаю, что этот пользовательский интерфейс с двумя навигационными барами отлично выглядит. Возможно, вы захотите удалить начальный контроллер навигации и использовать модальный сегмент, чтобы вместо этого отобразить контроллер панели вкладок. Вы могли бы добавить элемент панели на навигационные контроллеры, которые вам все равно придется увольнять с модального контроллера.
Ответ 4
Вам нужно заменить эти контроллеры представлений на UINavigationViewControllers
.
Удалите правые два контроллера представления.
Перетащите 2 UINavigationViewControllers
на раскадровку и расположите их так, как вы хотите.
Затем вам нужно подключить эти новые контроллеры отображения навигации к контроллеру панели вкладок. Нажмите Ctrl и перетащите его с контроллера панели вкладок на навигационные контроллеры. Выберите "Контроллеры просмотра" в разделе "Сегмент отношения" в появившемся меню. Сделайте это для обоих навигационных контроллеров.
Ответ 5
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Overview_Register"])
{
WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController];
[email protected]"Edit Profile";
obj.isRegister=NO;
}
}
[self performSegueWithIdentifier:@"Overview_Measure" sender:nil];
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"];
[self.navigationController pushViewController:tabBarController animated:YES];