如何使用 swiftui 创建表情符号键盘?

Posted

技术标签:

【中文标题】如何使用 swiftui 创建表情符号键盘?【英文标题】:How to create a emoji keyboard with swiftui? 【发布时间】:2020-01-21 04:25:41 【问题描述】:

我似乎不知道如何在 swiftui 中创建表情符号键盘。有没有办法用表情符号构建一个附加到键盘的文本字段?

I'm getting 4 errors and this is the link to the photo

【问题讨论】:

您必须为此使用 UIKit 并使 UIViewRepresentable。通过这样做,您可以在 SwiftUI 中使用您的 Textfield。要制作表情符号键盘文本字段,您可以参考这个答案 - https://***.com/questions/11382753/change-the-keyboard-layout-to-emoji/44753740#44753740 要制作 UIViewRepresentale 类,您可以从这里获得帮助 - https://gist.github.com/unnamedd/9346e1b0205ed6e2d09bf4709229a029 【参考方案1】:

请试试这个。希望对您有所帮助。

import SwiftUI

struct EmojiTF: View 

    @State var emojiText = ""


    var body: some View 
        VStack(spacing: 10) 
            Text("Emoji Pad:")
                .font(.body)
                .foregroundColor(.gray)

            TextFieldWrapperView(text: self.$emojiText)
                .background(Color.gray)
                .frame(width: 200, height: 50)
        
        .frame(height: 40)
    



struct TextFieldWrapperView: UIViewRepresentable 

    @Binding var text: String

    func makeCoordinator() -> TFCoordinator 
        TFCoordinator(self)
    


extension TextFieldWrapperView 


    func makeUIView(context: UIViewRepresentableContext<TextFieldWrapperView>) -> UITextField 
        let textField = EmojiTextField()
        textField.delegate = context.coordinator
        return textField
    


    func updateUIView(_ uiView: UITextField, context: Context) 

    


class TFCoordinator: NSObject, UITextFieldDelegate 
    var parent: TextFieldWrapperView

    init(_ textField: TextFieldWrapperView) 
        self.parent = textField
    

    //        func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    //            if let value = textField.text 
    //                parent.text = value
    //                parent.onChange?(value)
    //            
    //
    //            return true
    //        



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
    


struct EmojiTF_Previews: PreviewProvider 
    static var previews: some View 
        EmojiTF()
    

【讨论】:

我遇到了错误。我已经发布了上面的照片。 好的。我认为已经有一些带有协调器名称的类可用。我已经更新了我的代码,请试试这个。很抱歉给您带来不便。 @shraddha11,这个问题也有解决方案吗,***.com/q/71234010/15307343

以上是关于如何使用 swiftui 创建表情符号键盘?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 iOS 8 表情符号键盘?

如何在其他设备上显示我的键盘扩展的表情符号

如何获得 iOS 8.3 表情符号键盘高度?

如何清除填充表情符号字符的字体缓存?

iOS 8 自定义键盘

在iOS 9.0中以编程方式显示表情符号键盘