swift - 如何确保在文本字段 SwiftUi 中只能输入表情符号
问题描述
我在网上找到了这段代码,不知道怎么应用
class EmojiTextField: UITextField {
// required for iOS 13
override var textInputContextIdentifier: String? { "" } // return non-nil to show the Emoji keyboard ¯\_(ツ)_/¯
override var textInputMode: UITextInputMode? {
for mode in UITextInputMode.activeInputModes {
if mode.primaryLanguage == "emoji" {
return mode
}
}
return nil
}
}
解决方案
您可以使用此链接显示表情符号键盘。
我刚刚使用了这个类并创建了一个字符串扩展来过滤并获取唯一的表情符号。
我还添加了限制输入表情符号的代码。
extension String {
func onlyEmoji() -> String {
return self.filter({$0.isEmoji})
}
}
extension Character {
var isEmoji: Bool {
guard let scalar = unicodeScalars.first else { return false }
return scalar.properties.isEmoji && (scalar.value > 0x238C || unicodeScalars.count > 1)
}
}
import Combine
struct EmojiContentView: View {
@State private var text: String = ""
@State private var isEmoji: Bool = true
var body: some View {
HStack{
EmojiTextField(text: $text, placeholder: "Enter emoji", isEmoji: $isEmoji)
.onReceive(Just(text), perform: { _ in
// This allow only emoji
self.text = self.text.onlyEmoji()
/*
//This allow only emoji and allow only 3 emoji
self.text = String(self.text.onlyEmoji().prefix(3))
*/
})
}
}
}
推荐阅读
- postgresql - 如何使用 Payara Micro 将 LocalDate 保存到 Postgres
- laravel - Laravel 显示错误拒绝用户访问如何解决?
- javascript - 为什么我无法获取地理位置?
- django - 如何将 django 与 react 和 webpack 集成以创建多页 webapp?
- javascript - 如果页面上仍然存在加载程序,请重试等待
- angular - 离子 - 角度构建错误 - 无法分配给引用或变量
- python - 从 Appium 服务器我试图使用 python 获取应用程序的启动延迟时间
- r - Web Scraping BoardGameGeek with RVest
- git - 如何获取 Jenkins 构建详细信息,例如特定 GitHub 提交的构建号和测试结果状态
- jenkins - Jenkins 管道重试即使在超时后也会发生