#ios #swift #uibarbuttonitem
#iOS #swift #uibarbuttonitem
Вопрос:
Я пытаюсь изменить текст UIBarButtonItem «чисто» во время выполнения, чтобы можно было переключать режимы редактирования / выполнения. Однако каждый раз, когда я меняю атрибут title во время выполнения, анимация кажется неуклюжей. Я хочу подражать внешнему виду и функциям кнопки Редактировать / Готово в приложении Контакты (где Редактирование просто исчезает, а на его месте появляется Готово).
@IBAction func editDoneButtonPressed(sender: UIBarButtonItem) {
if(sender.title == "Edit"){
sender.title = "Done"
}else{
sender.title = "Edit"
}
}
Начальные настройки: идентификатор установлен на «пользовательский», а заголовок — на «Редактировать»
Предпочтительны более простые программные решения, однако внешний вид анимации действительно имеет первостепенное значение. Я бы подумал о переключении идентификатора UIBarButtonItem, а не его текстового атрибута, однако я не уверен в элегантном способе переключения идентификатора во время выполнения.
Кстати: я использую Swift для создания приложения.
Ссылки на…
Скринкаст редактирования приложения контактов / Выполненная анимация переключения:https://youtu.be/5mT_vzpNhIw
Скринкаст моей анимации редактирования / завершения переключения:https://youtu.be/mEweotJNVNE
Спасибо.
Комментарии:
1. Покажите, как вы настраиваете этот элемент кнопки панели.
2. Я имею в виду, что вам нужно обновить свой вопрос с помощью кода, используемого для создания и настройки кнопки редактирования.
3. Для настройки кнопки редактирования не использовался код. Он был перетащен на панель навигации. Спасибо.
Ответ №1:
Есть гораздо лучший способ, стандартный способ, получить кнопку Редактирования / Готово.
UIViewController
предоставляет стандартную кнопку Редактирования / готово, которая уже подключена к editing
свойству контроллера представления.
Обычное использование заключается в следующем:
Внутри viewDidLoad
метода вашего контроллера представления используйте стандартную кнопку:
self.navigationItem.rightBarButtonItem = editButtonItem
Поместите editButtonItem
туда, где вам это действительно нужно.
Затем, вместо настройки собственного действия, просто переопределите setEditing(_:animated:)
метод:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if (editing) {
// user just tapped the Edit button (it now says Done)
} else {
// user just tapped the Done button (it now says Edit)
}
}
Комментарии:
1. 1. Можно ли добавить эту стандартную кнопку на панель навигации?
2. 2. Устранит ли это неаккуратную анимацию, с которой я столкнулся?
3. 1. Это то, что делает код в моем ответе. Он добавляет кнопку в правую часть панели навигации. 2. Скорее всего. Это зависит от того, что вы делаете внутри
setEditing
метода.4. Требуется ли для этого, чтобы я удалил свою кнопку в IB?
5. Оператор, предназначенный для перехода в метод viewDidLoad, похоже, не создает и не помещает кнопку в панель навигации.