SwiftUI验证文本字段中的输入

彼得·斯科恩

我试图通过使用正则表达式删除某些字符来验证TextField中的用户输入。不幸的是,我遇到了textvar递归调用自身的didSet方法的问题

import SwiftUI
import Combine

class TextValidator: ObservableObject {

    @Published var text = "" {
        didSet {
            print("didSet")
            text = text.replacingOccurrences(
                of: "\\W", with: "", options: .regularExpression
            ) // `\W` is an escape sequence that matches non-word characters.
        }
    }

}


struct ContentView: View {

    @ObservedObject var textValidator = TextValidator()

    var body: some View {
        TextField("Type Here", text: $textValidator.text)
            .padding(.horizontal, 20.0)
            .textFieldStyle(RoundedBorderTextFieldStyle())

    }
}

迅速的文档(请参阅AudioChannel结构)上,Apple提供了一个示例,在该示例中,在其自己的didSet方法中重新分配了一个属性,并明确指出这不会导致didSet方法被再次调用。我在操场上做了一些测试,并确认了这种行为。但是,当我使用ObservableObjectPublished变量时,情况似乎有所不同

如何防止didSet方法递归调用自身?

我试过例子这个岗位,但他们没有工作。从那以后,Apple可能已经改变了一切,因此这篇文章不是该文章的重复。

同样,在遇到无效字符时将文本设置回方法oldValuedidSet意味着,如果用户粘贴文本,则将删除整个文本,而不是仅删除无效字符。因此,该选项将不起作用。

Mac3n

尝试通过以下TextField onRecive方法验证您想要的内容

class TextValidator: ObservableObject {

    @Published var text = ""

}

struct ContentView: View {

    @ObservedObject var textValidator = TextValidator()
    var body: some View {
        TextField("Type Here", text: $textValidator.text)
            .padding(.horizontal, 20.0)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .onReceive(Just(textValidator.text)) { newValue in
                let value = newValue.replacingOccurrences(
                    of: "\\W", with: "", options: .regularExpression)
                if value != newValue {
                    self.textValidator.text = value
                }
                print(newValue)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

验证GUI中的文本字段输入

来自分类Dev

JSF中的输入文本字段验证

来自分类Dev

SwiftUI在文本字段中输入货币格式(从右到左)

来自分类Dev

验证文本字段输入数组

来自分类Dev

验证对象中的文本字段

来自分类Dev

在iOS中验证文本字段

来自分类Dev

文本字段中的jquery验证

来自分类Dev

验证文本字段

来自分类Dev

从文本字段输入中过滤JList

来自分类Dev

输入文本字段中的提示值

来自分类Dev

在文本字段中输入明天的日期

来自分类Dev

创建与在SwiftUI中输入的数字一样多的文本字段

来自分类Dev

用户在文本字段中输入内容时运行验证

来自分类Dev

如何验证文本字段中的用户输入以将其与变量进行比较?

来自分类Dev

使用javascript验证文本字段中的输入(需要为两个值之一)

来自分类Dev

使用文本字段输入SwiftUI读取并进行计算

来自分类Dev

以角度动态创建输入文本字段的验证检查

来自分类Dev

Java-Selenium Webdriver:在文本字段中输入文本,并自动从文本字段中删除

来自分类Dev

SwiftUI文本字段颜色

来自分类Dev

滚动表格视图以在文本字段中输入文本?

来自分类Dev

Selenium Webdriver:在文本字段中输入文本

来自分类Dev

无法清除Ionic的输入文本字段中的文本

来自分类Dev

如何在文本字段中居中输入文本?

来自分类Dev

如何格式化输入文本字段中的文本

来自分类Dev

如何“收听”在文本字段中输入的文本?

来自分类Dev

Ruby未在Excel文件的文本字段中输入文本

来自分类Dev

无法使用WebDriver在文本字段中输入文本

来自分类Dev

ControlsFX 文本字段验证

来自分类Dev

是否可以在SwiftUI中保存输入到警报文本字段中的文本,并像这样-> Text(“在此处输入文本”)在应用程序中显示它?

Related 相关文章

  1. 1

    验证GUI中的文本字段输入

  2. 2

    JSF中的输入文本字段验证

  3. 3

    SwiftUI在文本字段中输入货币格式(从右到左)

  4. 4

    验证文本字段输入数组

  5. 5

    验证对象中的文本字段

  6. 6

    在iOS中验证文本字段

  7. 7

    文本字段中的jquery验证

  8. 8

    验证文本字段

  9. 9

    从文本字段输入中过滤JList

  10. 10

    输入文本字段中的提示值

  11. 11

    在文本字段中输入明天的日期

  12. 12

    创建与在SwiftUI中输入的数字一样多的文本字段

  13. 13

    用户在文本字段中输入内容时运行验证

  14. 14

    如何验证文本字段中的用户输入以将其与变量进行比较?

  15. 15

    使用javascript验证文本字段中的输入(需要为两个值之一)

  16. 16

    使用文本字段输入SwiftUI读取并进行计算

  17. 17

    以角度动态创建输入文本字段的验证检查

  18. 18

    Java-Selenium Webdriver:在文本字段中输入文本,并自动从文本字段中删除

  19. 19

    SwiftUI文本字段颜色

  20. 20

    滚动表格视图以在文本字段中输入文本?

  21. 21

    Selenium Webdriver:在文本字段中输入文本

  22. 22

    无法清除Ionic的输入文本字段中的文本

  23. 23

    如何在文本字段中居中输入文本?

  24. 24

    如何格式化输入文本字段中的文本

  25. 25

    如何“收听”在文本字段中输入的文本?

  26. 26

    Ruby未在Excel文件的文本字段中输入文本

  27. 27

    无法使用WebDriver在文本字段中输入文本

  28. 28

    ControlsFX 文本字段验证

  29. 29

    是否可以在SwiftUI中保存输入到警报文本字段中的文本,并像这样-> Text(“在此处输入文本”)在应用程序中显示它?

热门标签

归档