Задача
В моем приложении для iPad я не могу прикрепить всплывающее окно к элементу панели кнопок только после событий нажатия и удержания. Но это кажется стандартным для отмены / повтора. Как другие приложения делают это?
Фон
У меня есть кнопка отмены (UIBarButtonSystemItemUndo) на панели инструментов моего приложения UIKit (iPad). Когда я нажимаю кнопку отмены, она запускает действие, которое отменяется: и выполняется правильно.
Тем не менее, «стандартное соглашение UE» для отмены / повтора на iPad состоит в том, что нажатие кнопки отмены выполняет отмену, а нажатие и удержание кнопки открывает контроллер поповер, где пользователь выбрал либо «отмену», либо « повторить ", пока контроллер не будет снят с производства.
Обычный способ подключить контроллер поповера с помощью presentPopoverFromBarButtonItem:, и я могу достаточно легко это настроить. Чтобы это отображалось только после нажатия и удержания, мы должны установить представление, реагирующее на события жеста «длинное нажатие», как в следующем фрагменте:
UILongPressGestureRecognizer *longPressOnUndoGesture = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPressOnUndoGesture:)];
//Broken because there is no customView in a UIBarButtonSystemItemUndo item
[self.undoButtonItem.customView addGestureRecognizer:longPressOnUndoGesture];
[longPressOnUndoGesture release];
При этом после нажатия и удержания в представлении будет вызван метод handleLongPressOnUndoGesture: и в этом методе я настрою и отобразлю всплывающее окно для отмены / возврата. Пока все хорошо.
Проблема в том, что нет вида , к которому можно присоединиться. self.undoButtonItem - это UIButtonBarItem, а не представление.
Возможные решения
1) [Идеально] Прикрепите распознаватель жестов к элементу панели кнопок . Можно добавить распознаватель жестов к представлению, но UIButtonBarItem не является представлением. У него есть свойство для .customView, но это свойство равно nil, когда buttonbaritem является стандартным типом системы (в данном случае это так).
2) Использовать другой вид . Я мог бы использовать UIToolbar, но для этого потребовалось бы какое-то странное тестирование на попадание, и я был бы хакером, если вообще вообще возможно. Нет другого альтернативного взгляда, который я мог бы использовать.
3) Использовать свойство customView . Стандартные типы, такие как UIBarButtonSystemItemUndo, не имеют customView (это ноль). Установка customView сотрет стандартное содержимое, которое ему необходимо иметь. Это будет равносильно повторной реализации всего внешнего вида и функций UIBarButtonSystemItemUndo, если это вообще возможно сделать.
Вопрос
Как я могу прикрепить распознаватель жестов к этой "кнопке"? В частности, как я могу реализовать стандартное нажатие и удержание для показа повтора в приложении для iPad?
Идеи? Большое спасибо, особенно если кто-то действительно работает в своем приложении (я думаю о тебе, омни) и хочет поделиться ...