Как определить «команда + возврат» с внешней клавиатуры в UITextField - PullRequest
0 голосов
/ 15 января 2019

Я использую старое доброе решение для добавления символов нулевой длины, чтобы обнаружить пробелы в пустом текстовом поле ( Обнаружить событие возврата в UITextField ).

К сожалению, на iPad, если вы подключили внешнюю клавиатуру и нажали «cmd + backspace», он не вызывает метод shouldChangeCharactersInRange.

Я просмотрел документацию и декомпилированные заголовки и, похоже, не смог найти способ предотвратить это.

Итак, как мне обнаружить «команду + событие возврата»?

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать UIKeyCommand. Я тестировал на своем 10,5 "iPad Pro под управлением iOS 12.1.1, используя клавиатуру Bluetooth и приложение Swift Playgrounds версии 2.2.

Вот код игровой площадки:

import UIKit
import PlaygroundSupport

class ViewController: UIViewController {
    override func loadView() {
        let command = UIKeyCommand(input: "\u{8}", modifierFlags: .command, action: #selector(ViewController.handleKeyCommand), discoverabilityTitle: "Hello")
        addKeyCommand(command)

        let view = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
        view.contentMode = .topLeft
        view.backgroundColor = .white

        let stack = UIStackView()
        stack.axis = .vertical
        stack.spacing = 8
        stack.alignment = .fill
        stack.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(stack)
        NSLayoutConstraint.activate([
            view.leadingAnchor.constraint(equalTo: stack.leadingAnchor),
            view.trailingAnchor.constraint(equalTo: stack.trailingAnchor),
            view.topAnchor.constraint(equalTo: stack.topAnchor)])

        let textField = UITextField(frame: CGRect(x: 20, y: 20, width: 260, height: 30))
        textField.borderStyle = .roundedRect
        textField.translatesAutoresizingMaskIntoConstraints = false
        stack.addArrangedSubview(textField)

        label.translatesAutoresizingMaskIntoConstraints = false
        stack.addArrangedSubview(label)

        self.view = view
    }

    @objc func handleKeyCommand(_ sender: UIKeyCommand) {
        commandCount += 1
        label.text = "\(commandCount)"
    }

    private var commandCount = 0
    private let label = UILabel()
}

let vc = ViewController()
PlaygroundPage.current.liveView = vc

Нажмите в текстовом поле, затем нажмите ⌘⌫ . Каждый раз, когда вы нажимаете его, счетчик в метке увеличивается на 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...