UITableView Ячейка не показывает Удалить Меню - PullRequest
0 голосов
/ 25 июня 2018

Delete option in Menu not showing

UITableViewCell не отображает опцию «Удалить» в этом всплывающем меню. Он переходит к условию удаления в приведенном ниже коде, но не отображается в меню.

func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {

    print(action)
    print(action == #selector(delete(_:)))

    if action == #selector(copy(_:)) {
        return true
    }
    if action == #selector(paste(_:)) {
        return true
    }
    if action == #selector(delete(_:)) {
        return true
    }


    return super.canPerformAction(action, withSender: sender)

}

1 Ответ

0 голосов
/ 25 июня 2018

Вы получаете вырезать / копировать / вставить по умолчанию (можете заблокировать любое из них, возвращая 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, не нужно добавлять вручную в общий ресурс.Контроллер меню, похоже, вам нужно добавить их в ваш подкласс ячейки.

...