Я пытался настроить внешний вид заголовка панели навигации в своем приложении.
Мне пришлось создать пользовательский контроллер навигации (не только для этой проблемы), поэтому я решил переопределить функцию setTitle, подобную этой.
- (void)setTitle:(NSString *)title
{
NSLog(@"SETTING TITLE %@", title);
[super setTitle:title];
UILabel *titleView = (UILabel *)self.navigationBar.topItem.titleView;
NSLog(@"title view is %@", titleView);
if (!titleView) {
titleView = [[UILabel alloc] initWithFrame:CGRectZero];
titleView.backgroundColor = [UIColor clearColor];
titleView.font = [UIFont fontWithName:@"TradeGothicLTStd-Bold-Accent-Accent" size:20];
titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleView.textColor = [UIColor whiteColor];
self.navigationBar.topItem.titleView = titleView;
[titleView release];
}
titleView.text = [title uppercaseString];
[titleView sizeToFit];
self.navigationBar.tintColor= [UIColor colorWithRed:130.0f/255.0f green:120.0f/255.0f blue:90.0f/255.0f alpha:1.0f];
}
Все работало, как и ожидалось. Теперь проблема в том, что внутри навигационного контроллера у меня есть TableView. При нажатии на ячейку приложение переходит к другому TableView, который снова должен иметь настраиваемый заголовок.
Это код для didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSString *category_id = [[managedObject valueForKey:@"category_id"] stringValue];
NSString *name = [[[managedObject valueForKey:@"name"] description] capitalizedString];
CategoryViewController *category = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil];
category.category_id = category_id;
category.name = name;
category.managedObjectContext = self.managedObjectContext;
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:category animated:YES];
[category release];
}
.... но когда появляется выбранный вид, он отображается со стандартным шрифтом.
ИЗМЕНИТЬ Я заметил, что если во втором представлении я задаю заголовок в методе viewDidAppear, происходит что-то другое. если я напишу
- (void)viewDidAppear:(BOOL)animated
{
self.navigationController.title = name;
[super viewDidAppear:animated];
}
... заголовок на панели навигации имеет правильный (пользовательский) шрифт, но заголовок появляется только после того, как вид закончил скользить ....? Опять же, я явно делаю что-то не так, любая помощь будет оценена по достоинству :)
Спасибо за ваше время!
4 ответа
Фрагмент кода
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:107.0/256.0 green:145.0/256.0 blue:35.0/256.0 alpha:1.0]];
Изменит цвет панели навигации всего приложения.
Просто поместите его в метод didFinishLauncing приложения Appdelegate.
Начиная с iOS 5 вы можете сделать это напрямую с помощью UINavigationBar.
https://developer.apple.com/library/ios/# документация/UIKit/Reference/UINavigationBar_Class/Reference/UINavigationBar.html Настройка внешнего вида панели навигации
Просто установите словарь titleTextAttributes
Для iOS7 и более поздних версий решение таково:
[UINavigationBar appearance].barTintColor = [UIColor redColor];
Вставьте этот код в метод AppDelegate (didFinishLaunching:), и все должно работать нормально.
Вместо того, чтобы устанавливать это в методе viewDidAppear
, сделайте это в методе viewDidLoad
.
Похожие вопросы
Связанные вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].