Проблема
В моем приложении iPad я не могу прикреплять popover к элементу панели кнопок только после событий нажатия и удержания. Но это кажется стандартным для отмены/повтора. Как это делают другие приложения?
Фон
У меня есть кнопка отмены (UIBarButtonSystemItemUndo) на панели инструментов моего приложения UIKit (iPad). Когда я нажимаю кнопку отмены, он вызывает это действие, которое отменяется:, и это выполняется правильно.
Тем не менее, "стандартное соглашение UE" для отмены/повтора на iPad заключается в том, что нажатие на отмену отменяет отмену, но нажатие и удержание кнопки открывает контроллер popover, где пользователь выбирает "отмену" или "повторить" до тех пор, пока контроллер не будет отклонено.
Обычный способ подключения контроллера popover - с currentPopoverFromBarButtonItem:, и я могу настроить это достаточно легко. Чтобы показать это только после нажатия и удержания, мы должны установить представление, чтобы реагировать на события жестов "долгое нажатие", как в этом фрагменте:
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: и в рамках этого метода я настрою и покажу popover для отмены/повтора. Пока что так хорошо.
Проблема заключается в том, что нет никакого вида для присоединения. self.undoButtonItem - это UIButtonBarItem, а не представление.
Возможные решения
1) [Идеал] Прикрепите распознаватель жестов к элементу панели кнопок. Можно подключить распознаватель жестов к представлению, но UIButtonBarItem - это не представление. У него есть свойство для .customView, но это свойство равно нулю, когда buttonbaritem является стандартным системным типом (в данном случае это).
2) Используйте другое представление. Я мог бы использовать UIToolbar, но для этого потребовалось бы какое-то странное хитрое тестирование и было бы все вокруг взломать, если вообще возможно, в первую очередь. Другого альтернативного взгляда использовать не могу, о чем я могу думать.
3) Используйте свойство customView. Стандартные типы, такие как UIBarButtonSystemItemUndo, не имеют customView (это нуль). Настройка customView приведет к стиранию стандартного содержимого, которое оно должно иметь. Это будет означать повторную реализацию всех взглядов и функций UIBarButtonSystemItemUndo, если это даже возможно сделать.
Вопрос
Как я могу прикрепить распознаватель жестов к этому "button"? Более конкретно, как я могу реализовать стандартное прессование и удерживать-показать-повторить-popover в iPad-приложении?
Идеи? Большое вам спасибо, особенно если кто-то действительно работает в своем приложении (я думаю о вас, omni) и хочет поделиться...