Как мы можем использовать долгое нажатие для удаления целых слов для пользовательских клавиатур в iOS 8?

Как мы знаем, исходная клавиатура в iOS может удалять целые слова, удерживая нажатой кнопку удаления (⌫) в течение длительного периода времени.
Так как же мы можем использовать ту же функциональность для пользовательских клавиатур в Swift, iOS 8?

Примечание.
В настоящее время я использую proxy.deleteBackward() для удаления писем и использую:

var gesture = UILongPressGestureRecognizer(target: self, action: "longPressed:")
gesture.minimumPressDuration = 1.0
button.addGestureRecognizer(gesture)

когда кнопка нажата в течение большего количества времени.

Спасибо!


person He Yifei 何一非    schedule 08.06.2015    source источник


Ответы (1)


Я не уверен, как вы сможете сделать это с помощью распознавателя жестов.

Исходное поведение клавиатуры:

  • Когда кнопка нажата и удерживается нажатой в течение начального временного интервала X, она продолжает удалять в обратном направлении.
  • Когда кнопка удерживается нажатой после начального временного интервала X, она начинает удалять слова, а не только символы.

После того, как кнопка нажата в первый раз, вы, вероятно, должны продолжать вызывать свою функцию удаления и продолжать замечать, истек ли «интервал X-времени». Псевдокод будет

var startTime: NSDate = NSDate()
var timer: NSTimer?
func deleteButtonPressed(deleteButton: UIButton) {
    startTime = NSDate()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("delete"), userInfo: nil, repeats: true)
}

func delete() {
    if !deleteButton.highlighted {
        timer.invalidate()
        timer = nil
        return
    }

    if ((currentNSDate - startTime ) < "X-time-Interval") {
        // delete backward
    } else {
        /* figure out last space character in text and create NSRange
        then
        mytextView.text deleteCharactersInRange:theRange
        set new text */
    }
}
person Shamas S    schedule 08.06.2015
comment
но я пытаюсь создать пользовательское расширение клавиатуры, которое можно использовать в другом приложении (во всей системе). Как тогда работает mytextView.text deleteCharactersInRange:theRange? - person He Yifei 何一非; 09.06.2015
comment
DeleteCharactersInRange — это функция для текста. Так что это должно работать. Если ваша клавиатура работает универсально, она должна знать, какой textField/textView она редактирует. - person Shamas S; 09.06.2015