У меня есть модальный контроллер представления, представление которого происходит из XIB. Я хочу, чтобы он имел такой же внешний вид, как и остальная часть моего приложения на основе навигации, но это не представление, которое помещается в стек навигации, оно представлено модально. Я перетащил UINavigationBar и сделал его выходом, но у него нет свойства title, которое нужно установить. У меня есть два поля, которые могут вызвать это модальное представление, и я хочу, чтобы заголовок устанавливался по-разному, в зависимости от того, какое из них создает модальное представление.
Установите заголовок панели навигации, созданной в Интерфейсном Разработчике
Ответы (8)
UINavigationBar
управляет стеком из UINavigationItem
так же, как UINavigationController
менеджер стеком из UIViewController
. Чтобы установить то, что видно напрямую, вы должны использовать pushNavigationItem:animated:
или setItems:animated:
, используя navigationItem контроллера представления, который вы хотите отразить на панели.
eg:
self.navigationItem.title = @"A custom title";
[self.navigationBar pushNavigationItem:self.navigationItem animated:NO];
В приведенном выше коде есть свойство navigationBar
, которое ссылается на автономную панель навигации.
Если вы не хотите управлять им самостоятельно, вы можете сделать так, как предлагает mplappert, и вложить свой контроллер представления (без автономного UINavigationBar
) в UINavigationController
и представить контроллер навигации модально вместо контроллера представления.
Также нашел этот более простой способ, если вы уже определили UINavigationBar в своем IB. Предполагая, что self.navigationBar - это ваш IBOutlet:
self.navigationBar.topItem.title = title;
(Используя XCode 4.5.2) Нашел метод, который работает непосредственно в Интерфейсном Разработчике - без настройки в коде.
Когда объект ViewController выбран в (IB), в Инспекторе удостоверений есть раздел с надписью «Пользовательские атрибуты времени выполнения». Я добавил keyPath «title» типа String и установил для него желаемое значение.
Протестировано, и это работает при помещении в стек контроллера навигации и при модальном открытии (конечно, с помощью модального контроллера навигации).
файл viewcontroller.h в создании iboutlet элемента навигации
@property (weak, nonatomic) IBOutlet UINavigationItem *navigationBarTitle;
- Назвал его "navigationBarTitle".
в файле viewcontroller.m добавьте код в super viewDidLoad
self.navigationBarTitle.title = @"Favorites";
подключите раскадровку в элементе панели навигации к navigationBarTitle.
в моем файле .h
Перетащил дочерний элемент элемента навигации из раскадровки в файл .h
Он назвал его "navigationBarTitle".
в моем файле .m
- Добавлен self.navigationBarTitle.title = @ "Some Title";
Вот самый простой способ:
[[[self.navigationController navigationBar] topItem] setTitle:@"The Title"];
вы можете использовать существующую панель навигации со следующим кодом
self.navigationController?.navigationBar.topItem?.title = "Calender"
Просто поместите свой UIViewController
в новый стек контроллера представления UINavigationController
s и представьте этот контроллер навигации модально.