uitextfield - Swift 4 如何知道当 UITextField 成为第一响应者时按下了删除键?
问题描述
我已经找到了答案,都是关于使用shouldChangeCharactersInRange
UITextFieldDelegate 的功能。它适用于大多数情况。但是如果 UITextField 已经为空,shouldChangeCharactersInRange
点击删除按钮时不再调用方法。任何帮助表示赞赏。
解决方案
这可以使用多种方法来完成(虽然不是直接的!)。一种是在其上放置一个不可见的按钮,或者通过子类UITextField
化并将其添加为所需文本字段的自定义类。然后重写方法deleteBackward
。此方法将捕获所有退格事件。
子类 UITextField:
// MyTextField.swift
import UIKit
protocol MyTextFieldDelegate {
func textFieldDidDelete()
}
class MyTextField: UITextField {
var myDelegate: MyTextFieldDelegate?
override func deleteBackward() {
super.deleteBackward()
myDelegate?.textFieldDidDelete()
}
}
执行:
// ViewController.swift
import UIKit
class ViewController: UIViewController, MyTextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// initialize textField
let input = MyTextField(frame: CGRect(x: 50, y: 50, width: 150, height: 40))
// set viewController as "myDelegate"
input.myDelegate = self
// add textField to view
view.addSubview(input)
// focus the text field
input.becomeFirstResponder()
}
func textFieldDidDelete() {
print("delete")
}
}
推荐阅读
- python - 十六进制值的 Bigram
- android - Flutter:限制应用程序中的屏幕捕获
- c++ - 在 C++ 中乘以单个位值
- discord.js - Discord.js TypeError:message.member.roles.find 不是函数
- arrays - 如何在 go 中用另一个切片替换部分切片
- swift - 对于依赖多范围过滤功能的应用来说,Cloud Firestore 是不是一个糟糕的数据库选择?
- excel - 将 Excel 工作表 (VBA) 与异常相结合
- c++ - 我可以为不超过 10^9 的整数创建 unordered_map 吗?
- dataframe - PySpark - 如何从一个数据帧中获取模式并将其应用于另一个?
- asp.net-core - ASP.Net Core 3.0 合并角色