it-swarm.com.ru

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

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

Storyboard

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

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

Правка:

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

New setup

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

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

20
Matthijn

Для изменения заголовка UINavigationBar (без необходимости создавать 2 других UINavigationController) вы можете просто использовать 

[self.parentViewController.navigationItem setTitle:@"Title"];

и для добавления правой кнопки используйте

self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];

на метод 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 родителя.

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

24
ErickBergmann

На всякий случай, если бы кто-то искал подход Swift:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

Код лучше всего помещать в viewDidAppear или viewWillAppear, поэтому заголовок и кнопка меняются при нажатии разных вкладок.

Вам также не понадобятся дополнительные навигационные контроллеры с таким подходом.

10
Cradmon

Я посмотрел на ваше тестовое приложение и очень слабо вижу заголовок под панелью навигации. Вы можете увидеть обе панели навигации, если выберете контроллер панели вкладок и снимите флажок «Под верхними панелями». Тем не менее, это дает вам странную тень на панели навигации. Я не знаю, есть ли простой способ исправить это, но я не думаю, что этот интерфейс с двумя панелями навигации выглядит хорошо. Возможно, вы захотите удалить начальный контроллер навигации и использовать модальный переход вместо представления контроллера панели вкладок. Вы можете добавить элемент панели кнопок в контроллеры навигации, которые вам все равно придется отменить для контроллера модального вида.

3
rdelmar

Вам необходимо заменить эти контроллеры представления на UINavigationViewControllers.

Удали правые два вида контроллеров.

Перетащите drop 2 UINavigationViewControllers на раскадровку и расположите их так, как вы хотите.

Затем вам нужно подключить эти новые контроллеры навигационного представления к контроллеру панели вкладок. Нажмите Ctrl и перетащите с контроллера панели вкладок на контроллеры навигации. Выберите «просмотреть контроллеры» в разделе «Отношения отношений» всплывающего меню. Сделайте это для обоих навигационных контроллеров.

1
ColdLogic
- (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];
0
Anand