2013-07-11 3 views
1

Я пишу приложение iOS 6, и я хочу установить представление заголовка, которое будет отображаться для всех моих просмотров, если я не укажу иначе. Я пробовал [[UINavigationBar appearance] setTitleView:view] и [[UIBarButtonItem appearance] setTitleView:view], но ни один из них не работал.Как настроить представление заголовка по умолчанию для моих навигационных контроллеров?

Примечание: этот заголовок не может быть ярлыком, это должна быть кнопка.

Любые идеи?

ответ

1

Вы используете UINavigationController?

Если да, то использовать что-то вроде следующего, чтобы установить фоновое изображение и шрифт:

[[UINavigationBar appearance] setTitleTextAttributes: 
      [NSDictionary dictionaryWithObjectsAndKeys: 
         [UIColor blackColor], UITextAttributeTextColor, 
         [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:22.0], UITextAttributeFont,nil]]; 

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBar.png"]   forBarMetrics:UIBarMetricsDefault]; 

Если вы хотите, чтобы применить изменения к панели навигации в некоторых конкретных подклассов UIViewController, а затем использовать что-то вроде следующие:

[[UINavigationBar appearanceWhenContainedIn:[VCSubclassToChangeAppearance class], nil] 
setBackgroundImage:[UIImage imageNamed:@"navBar.png"] 
forBarMetrics:UIBarMetricsDefault]; 

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

Если вы хотите изменить внешний вид стандартных кнопок на панели навигации, сделать что-то вроде этого:

UIImage *standardBackgroundImage = [[UIImage imageNamed:@"navBarButton.png"] 
            resizableImageWithCapInsets:UIEdgeInsetsMake(0, 8, 0, 8)]; 

[[UIBarButtonItem appearance] setBackgroundImage:standardBackgroundImage 
             forState:UIControlStateNormal 
              style:UIBarButtonItemStyleBordered 
             barMetrics:UIBarMetricsDefault]; 

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

+0

Мне нужно, чтобы в качестве заголовка была кнопка, а не ярлык. – meisel

+0

Когда вы говорите «вид названия», вы на самом деле имеете в виду UINavigationBar? Это поможет уточнить, действительно ли я посылаю вас по правильному пути. – siburb

+0

Да, моя ошибка. Заголовок названия каждого UINavigationBar. – meisel

0

Вы можете попробовать добавить подвид (UITextField) на панели навигации:

UITextField *titleField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100.0, 60.0)]; 
titleField.text = @"a title"; 
titleField.center = self.navigationController.navigationBar.center; 
[self.navigationController.navigationBar addSubview:titleField]; 
+0

Как бы настроить его в отдельных контроллерах? – meisel

+0

Я бы сделал это, определив свойство на контроллерах отдельных представлений, то есть someViewController.titleField.Затем, создав и добавив titleField в панель, я бы установил someViewController.titleField = titleField (давая новому контроллеру представления ссылку на titleField). Затем нажмите someViewController. Изнутри someViewController вы можете получить доступ к self.titleField, чтобы настроить представление. –

0
  1. Вы можете определить глобальную переменную после этого набора названия для каждой ViewController командой:

    себя. title = kDefaultTitle

  2. Если вы используете панель рассказов, вы можете установить ее на каждом viewController в свойствах Title на правой панели

  3. Final: Я думаю, что вы можете автоматически установить все название зрения (исключите вы нападаете на ядро)
+0

Можете ли вы подробно остановиться на 3, пожалуйста? Кроме того, я не просто хочу установить заголовок, я хочу установить фактическое название. – meisel

+0

Я рекомендую вам не атаковать ядро, это очень опасно с вашим приложением. – crz

0

Поскольку UIBarButtonItem различных контроллеров представления изменит вид заголовка на панели навигации, вы не можете установить заголовок в глобальном масштабе. Вы можете использовать подход @Jake или подкласс UIViewController, в котором вы можете переопределить метод setTitle. И используйте этот класс как суперкласс всех ваших собственных контроллеров представлений.

0

Вы можете поместить любой вид в titleView в любом ViewController, который обернут в UINavigationController на следующий код.

self.navigationItem.titleView = yourView; 

Попробуйте этот.

Смежные вопросы