Определить ключ удаления с помощью UIKeyCommand
Кто-нибудь знает, как обнаружить "удалить" ключ с помощью UIKeyCommand
на iOS 7?
4 ответа
На самом деле все просто - нужно искать символ возврата "\b"
Поскольку у людей возникли проблемы со Swift, я подумал, что небольшой, полный пример в Objective C и Swift может быть хорошим ответом.
Обратите внимание, что Swift не имеет \b
escape-символ для возврата, поэтому вам нужно использовать простую скалярную последовательность ESC \u{8}
, Это соответствует тому же самому управляющему символу ASCII старой школы № 8 ("control-H" или ^H в обозначении каретки) для возврата на \b
делает в цель C.
Вот реализация контроллера представления Objective C, которая ловит backspace:
#import "ViewController.h"
@implementation ViewController
// The View Controller must be able to become a first responder to register
// key presses.
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (NSArray *)keyCommands {
return @[
[UIKeyCommand keyCommandWithInput:@"\b" modifierFlags:0 action:@selector(backspacePressed)]
];
}
- (void)backspacePressed {
NSLog(@"Backspace key was pressed");
}
@end
А вот эквивалентный контроллер вида в Swift:
import UIKit
class ViewController: UIViewController {
override var canBecomeFirstResponder: Bool {
return true;
}
override var keyCommands: [UIKeyCommand]? {
return [
UIKeyCommand(input: "\u{8}", modifierFlags: [], action: #selector(backspacePressed))
]
}
@objc func backspacePressed() {
NSLog("Backspace key was pressed")
}
}
Начиная с iOS 15 естьUIKeyCommand.inputDelete
константа , которая работает:
UIKeyCommand(title: "Delete Widget",
action: #selector(WidgetViewController.deleteWidget(_:)),
input: UIKeyCommand.inputDelete)
Вы всегда можете попробовать UIKeyInput. https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIKeyInput_Protocol/index.html
Функция должна быть
- (void)deleteBackward