Подтвердить что ты не робот

Контроллер навигации по раскадровке и контроллер панели вкладок

Я пытаюсь получить следующую настройку в Storyboard.

Storyboard

Где у меня есть представление таблицы в начале, и когда я нажимаю на ячейку, ему нужно перейти к контроллеру панели вкладок, который работает. Но теперь я хочу заголовок и дополнительную кнопку панели навигации в двух наиболее правильных контроллерах.

Но я не могу перетащить кнопку туда или при настройке названия, ничего не появляется. Как я могу достичь этой настройки в раскадровке?

изменить:

Обновленный вопрос, основанный на ответе ниже.

New setup

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

edit: У меня загружен проект xcode именно с этой настройкой. Возможно, это может пригодиться.

4b9b3361

Ответ 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];