Как генерировать события нажатия и отпускания клавиши клавиатуры для приложения IOS с помощью Swift

Я новичок в разработке IOS, и я хочу отправить несколько событий нажатия и отпускания клавиш программной клавиатуры из фреймворка в приложение, используя версию Swift 2.3 или 3.0.

Спасибо за любую помощь


person Shariff Shaik    schedule 26.12.2016    source источник
comment
Возможный дубликат быстрого изменения данных UITextView   -  person xoudini    schedule 26.12.2016


Ответы (2)


Если я правильно понял ваш вопрос, вы спрашиваете, как определить, когда вы набираете клавиши. Существуют методы делегата textField, которые сделают эту работу за вас.

`// UITextField Delegates
    func textFieldDidBeginEditing(_ textField: UITextField) {
    }
    func textFieldDidEndEditing(_ textField: UITextField) {
    }
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return true;
    }
    func textFieldShouldClear(_ textField: UITextField) -> Bool {
        return true;
    }
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        return true;
    }
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        return true;
    }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder();
        return true;
    }`

Обновление:

Невозможно получить события касания непосредственно с виртуальной клавиатуры. Тем не менее, вы можете использовать UITextField, который вы помещаете за пределы экрана, чтобы он не был виден, и вызывать beFirstResponder, чтобы отобразить клавиатуру. Затем вы можете реализовать метод делегата textView:shouldChangeTextInRange: для получения уведомлений при каждом нажатии клавиши.

Более чистой возможностью было бы написать собственный UIControl, реализующий протокол UIKeyInput. Вам нужно будет только предоставить реализации для insertText:, deleteBackward и hasText (для этого вы всегда можете просто вернуть YES). Чтобы сделать клавиатуру видимой, вам снова пришлось бы вызывать метод beFirstResponder для вашего пользовательского элемента управления.

Общим для обоих этих методов является то, что вы будете уведомлены только тогда, когда клавиша будет отпущена (чтобы был введен текст), а не когда фактически начинается касание. Как я уже сказал, невозможно напрямую получить событие tochesBegan. Если вам это нужно, вам, вероятно, придется реализовать собственную экранную клавиатуру.

person Sivajee Battina    schedule 26.12.2016
comment
Спасибо, Сиваджи, вы правильно поняли, но я не хочу использовать текстовое поле, так что есть ли другой способ определить, какая клавиша нажата или отпущена на клавиатуре? - person Shariff Shaik; 26.12.2016

Просто добавьте цель для редактирования события уведомления следующим образом:

// Obj-C
[textObject addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];

- (void)editingChanged:(id)object {
    // Do your code here
}

// Swift
textObject.addTarget(self, action: #selector(self.editingChanged(textObject:)), for: .editingChanged)

func editingChanged(textObject: AnyObject) {
    // Do your code here
}
person NFerocious    schedule 26.12.2016