检测TextEditor SwiftUI中键盘“提交按钮”的按下

6
在SwiftUI的TextField上,您可以使用.onSubmit()修饰符为键盘的return/submit按钮设置一个动作。如何在TextEditor上做到同样的效果?(.onSubmit()似乎不起作用。)
3个回答

9

您可以像这样使用 on change 来绑定 TextEditor 的变量:

    TextEditor(text: $text)
        .onChange(of: text) { _ in
            if !text.filter({ $0.isNewline }).isEmpty {
                print("Found new line character")
            }
        }

请注意,TextEditor 没有一个明确的提交按钮。它旨在接受各种文本,数量不限。


我找到的最佳解决方案!我正在寻找这样的东西来将“聚焦字段”设置为nil并保存文本,因此如果有人需要相同的功能,可以在IF语句中添加text.removeLast(),以便在用户按下“返回”按钮时保存没有添加空格的文本。 - Alessandro Pace

1

另一种了解用户何时创建新行的方法:

TextEditor(text: $text)
            .onChange(of: text) { string in
                for char in string
                {
                    if char() == "\n"
                    {
                        print("Found new line character")
                    }
                }
            }

Yrb的回答和这个方案都很好,但是每当发现一个新行并且每次向文本编辑器中添加一个新字符时,您就需要执行相同的操作print("Found new line character")

如果您想要知道每当用户按下回车或创建新行时的情况,这个方案对您来说是更好的解决方案:

TextEditor(text: $text)
            .onChange(of: text) { string in
                if string.last == "\n"
                {
                    print("Found new line character")
                }
            }

-2
这是您的解决方案:

onCommit:当用户按下回车键时,TextField调用onCommit闭包。


1
OP 询问的是 TextEditor,而不是 TextField。此外,.onCommit 已被弃用,推荐使用 OP 讨论过的 .onSubmit - Yrb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接