我正在寻找如何捕获退格事件的解决方案,大多数堆栈溢出的答案都是Objective-C,但我需要Swift语言.

首先,我为UITextField设置了delegate,并将其设置为self

self.textField.delegate = self;

然后我知道使用shouldChangeCharactersInRange委托方法来检测是否按下了退格,所有代码都在Objective-C中.我需要在Swift中使用以下方法.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
    int isBackSpace = strcmp(_char, "\b");

    if (isBackSpace == -8) {
        // NSLog(@"Backspace was pressed");
    }

    return YES;
}

推荐答案

Swift 4.2

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if let char = string.cString(using: String.Encoding.utf8) {
        let isBackSpace = strcmp(char, "\\b")
        if (isBackSpace == -92) {
            print("Backspace was pressed")
        }
    }
    return true
}

Older Swift version

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let  char = string.cStringUsingEncoding(NSUTF8StringEncoding)!
    let isBackSpace = strcmp(char, "\\b")

    if (isBackSpace == -92) {
        println("Backspace was pressed")
    }
    return true
}

Swift相关问答推荐

{Singleton类}类型的值没有成员$showegView'

可编码:将字符串解码为自定义类型(ISO 8601日期,无时间组件)

SWIFT并发:合并Taskgroup和AsyncStream?

按变换zoom 在UIView中不起作用

如何在每天午夜重置布尔值

我可以为UIMenu设定一个固定的订单吗?

与视图交互使工具栏&;标题消失

Swift 扩展:通过方法重载增强现有类

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

String(validatingUTF8:) 和 String(utf8String:) 之间有区别吗?

如何避免从模块导入函数

您是否必须手动指定您的 DispatchQueue 是串行的?

如何从另一个 swift 文件中调用函数

单击按钮后的计时器发布者初始化计时器

(SwiftLint)如果有正文,如何编写规则(可能是自定义),在{之后总是\n(换行)?

如何删除标签和步进按钮之间的间距是 SwiftUI Stepper?

无法使用锚激活约束

如何轻松删除领域中的所有对象

为什么'nil' 与 Swift 3 中的 'UnsafePointer' 不兼容?

通过单击表格视图中的单元格打开新的视图控制器 - Swift iOS