Настройка заголовка навигационной панели внутри контроллера панели вкладок

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

Вот изображение моей раскадровки, чтобы убедиться, что мы разобрались друг с другом.

enter image description here

Это мой код, который должен работать. Я использовал этот код при попытке открыть один вид, а не контроллер табуляции, и он работал правильно. Поэтому, я думаю, я должен что-то изменить.

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{       
        SkiCenter *myDetViewCont = [[SkiCenter alloc] initWithNibName:@"SkiCenter" bundle:[NSBundle mainBundle]];
        myDetViewCont.ski_center = [centers objectAtIndex:indexPath.row];
        UIStoryboard * storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        [[self navigationController] pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"SkiCenterIds"] animated:YES];
        //[self.navigationController pushViewController:myDetViewCont animated:YES]; // "Pushing the controller on the screen"
        [myDetViewCont release]; // releasing controller from the memory
        myDetViewCont = nil;        
    }

Где Skicenter - это имя класса для моей первой вкладки, а SkiCenterIds - идентификатор моего контроллера вкладок в раскадровке.

Код в Skicenter.m:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.navigationItem.title = ski_center;        
}

но я не вижу никакого названия. Так что я сделал не так? Я также пробовал это:

[self.navigationController setTitle:@"Live"];

или

self.title=ski_center;

Значение ski_center имеет значение, поскольку оно обычно печатается в NSLog.

Ответ 1

В принципе, я не знаю, не заметили ли вы, но я сделал это так:

Я назначил свой контроллер панели вкладок новый класс.

Я сделал следующее:

добавьте его в приложение delegate.h

@property (nonatomic,retain) NSString *center;

добавьте его в mainmap.m

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    delegate.center=[centers objectAtIndex:indexPath.row];

и mytabbarcontroller.m

  AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    ski_center=delegate.center;

    self.navigationItem.title = ski_center;

Ответ 2

Simple!

[self.tabBarController setTitle:@"Title"];

Ответ 3

Добавляя к решению ghostrider, в mytabbarcontroller.m self.navigationItem.title не работает для меня. У меня есть NavigationController, чей подробный вид является TabController, и это то, что у меня есть в моей первой реализации вкладки

self.navigationController.visibleViewController.title = ski_center;

Ответ 4

Хорошо, так что вы знаете, очень плохая практика разместить UITabBarController внутри UINavigationController. Apple рекомендует для хорошего дизайна пользовательского интерфейса, что вы должны когда-либо ставить UINavigationController внутри UITabBarController, а не другой наоборот. В любом случае, вы должны иметь возможность изменить название из UITabBarController следующим образом:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [[self.navigationController.viewControllers objectAtIndex:0] setTitle:ski_center];        
}

Это должно работать.

Ответ 5

В быстрой 3

self.tabBarController?.navigationItem.title = "Your title goes here"

Ответ 6

В Swift 4 и выше

self.tabBarController?.title = "Title"

Ответ 7

 UITabBarController *tabController = (UITabBarController *)self.parentViewController;

 tabController.navigationItem.title = @"ABC";

Это работает для меня

От некоторых R & D в Интернете

Вы должны передать navigationItem цепочку. UINavigationController показывает элемент navigationItem, принадлежащий его topViewController, который является UITabBarController. UITabBarController отображает заголовки navigationItem в своих вкладках. Итак, что вам нужно сделать, это убедиться, что элемент навигации tabBarController выбрано в качестве элемента управленияViewController navigationItem

Итак, чтобы повторить:

UINavigationController title= topViewController.navigationItem.title

UITabBarController tabtitle= selectedViewController.navigationItem.title

UIViewController title= navigationItem.title

Ответ 8

попробуйте следующее:

[self.navigationController setTitle:@"Live"];

Ответ 9

Я наткнулся на это и нашел более простое решение. Новым решением было бы изменить заголовок панели навигации с контроллеров приземления, как показано ниже

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.title = "title";
 }