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