UINavigationBar редактируемый заголовок?
У меня есть приложение на основе UINavigationController. Я могу программно установить заголовок UINavigationBar из моего метода viewDidLoad контроллера вида:
self.navigationItem.title = m_name;
Могу ли я сделать так, чтобы заголовок на панели навигации редактировался? IE. Я хочу, чтобы пользователь мог нажимать заголовок на панели навигации и иметь возможность редактировать его.
Возможно ли это? И если это возможно, разве это, скорее всего, будет соответствовать Руководствам по человеческому интерфейсу Apple? (Этот пост предполагает, что это будет, но не говорит мне, как его реализовать - Изменить название UINavigationBar)
Большое спасибо
Натан
Ответы
Ответ 1
Вы можете настроить пользовательское представление для своего заголовка.
titleView
Пользовательский вид отображается в центре панели навигации, когда приемник - это верхний элемент.
@property (неатомный, сохраняющий) UIView * titleView
Обсуждение
Если это значение свойства равно nil, заголовок навигационных элементов отображается в центре навигационной панели, когда приемник является верхний предмет. Если вы установите это свойство в пользовательский заголовок, он отображается вместо названия. Это свойство игнорируется, если leftBarButtonItem не ноль.
Пользовательские представления могут содержать кнопки. Используйте метод buttonWithType: Класс UIButton для добавления кнопок в пользовательский вид в стиле Панель навигации. Пользовательские названия в центре расположены на панели навигации и может быть изменен по размеру.
Если вы должны поместить UITextField в свой заголовок, вы можете дать ему фон clearColor и установить, чтобы он не имел границы. Wala у вас есть заголовок UINavigationBar, который вы можете нажать и отредактировать.
Ответ 2
Решение Райана в точности верное. В случае, если у кого-то возникли проблемы с его реализацией, вот пример кода, который должен вас поймать. Просто вставьте его в ViewDidLoad в любом классе с помощью navigationController.
UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)];
textField.text = @"Insert Title Here";
textField.font = [UIFont boldSystemFontOfSize:19];
textField.textColor = [UIColor whiteColor];
textField.textAlignment = NSTextAlignmentCenter;
self.navigationItem.titleView = textField;
И если ваш проект не использует ARC, обязательно отпустите textField так:
UITextField *textField = [[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]autorelease];
или так:
[textField release];
Надеюсь, что это поможет.
Ответ 3
Раян для быстрого
let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 22))
textField.text = "Title"
textField.font = UIFont.systemFontOfSize(19)
textField.textColor = UIColor.whiteColor()
textField.textAlignment = .Center
self.navigationItem.titleView = textField
Ответ 4
Вы можете поместить текстовое поле прямо в верхнюю часть панели навигации и установить его скрытым/не включенным. Используйте распознаватель жестов для обнаружения нажатия на панели навигации и установите текстовое поле для включения/выключения. Затем в текстовое поле был закончен метод редактирования, снова установите его в скрытое и установите заголовок панели навигации в поле текстового поля.
Ответ 5
Добавьте скрытое текстовое поле над навигационной панелью, поэтому при нажатии на него появится всплывающее окно, и пользователь может ввести текст в это.
Получить событие кнопки возврата, там вы можете изменить текст панели навигации с помощью вновь добавленного текста. И снова спрячьте текстовое поле.
Наслаждайтесь кодированием:)
Ответ 6
Поместите textField на NavigationBar и установите цвет фона textField с непрозрачностью до нуля.
Ответ 7
Вот код Ciprian в Swift 4, исправленный для iOS 12:
let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
textField.text = "Your Title"
textField.font = UIFont.systemFont(ofSize: 17, weight: .semibold)
textField.textAlignment = .center
self.navigationItem.titleView = textField