Настройка заголовка навигационной панели внутри контроллера панели вкладок
В моем приложении у меня есть контроллер навигации с табличным представлением, а при нажатии кнопки открывается контроллер табуляции. На первой вкладке я хочу, чтобы заголовок навигационной панели был установлен.
Вот изображение моей раскадровки, чтобы убедиться, что мы разобрались друг с другом.
![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";
}