Вы получаете вырезать / копировать / вставить по умолчанию (можете заблокировать любое из них, возвращая false
в canPerformAction
), но другие действия (из которых вы увидите всего 20, включая удаление, а также другие iOS)стандартные системные действия, такие как «selectAll» и «makeTextWritingDirectionRightToLeft») по умолчанию не включены в контекстное меню UITableViewCell
.
Если вы хотите, чтобы какие-либо дополнительные действия отображались, вы должны реализовать их в своем UITableViewCell
подкласс.
например, в свой подкласс ячейки просто добавьте:
override func delete(_ sender: Any?) {
print("delete")
}
И если вы вернете true
для селектора удаления, вы должны увидеть пункт удаления в контекстном меню длялюбая такая клетка.performAction
в представлении табличного представления по-прежнему необходимо, поскольку в противном случае меню вообще не будет отображаться, но фактическая обработка действия выполняется в этом методе подкласса ячейки.
Если вы хотите добавить пользовательскийдействия, вы можете добавить их к общим элементам UIMenuController
, а также реализовать их в подклассе UITableViewCell
.(Использовал этот урок в качестве справочного материала, а также для моего собственного тестирования).
Например, в вашем контроллере вида viewDidLoad
let menuController = UIMenuController.shared
let item = UIMenuItem(title: "My Custom Action", action: #selector("youraction"))
var items = menuController.menuItems ?? [UIMenuItem]()
items.append(item)
menuController.menuItems = items
Тогда вам понадобитсячтобы реализовать «youraction» в вашем подклассе UITableViewCell
, иначе он не будет отображаться.
Обратите внимание, что ни одно из стандартных 20 действий, которые вы видите распечатанными в canPerformAction
, не нужно добавлять вручную в общий ресурс.Контроллер меню, похоже, вам нужно добавить их в ваш подкласс ячейки.