Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使iOS SwiftUI文本字段拒绝错误的数字输入_Ios_Swiftui_Textfield - Fatal编程技术网

使iOS SwiftUI文本字段拒绝错误的数字输入

使iOS SwiftUI文本字段拒绝错误的数字输入,ios,swiftui,textfield,Ios,Swiftui,Textfield,我的iOS SwiftUI允许用户输入一个Int。如果用户键入错误的输入字符,例如“abc”而不是“123”,我希望在我的文本中显示错误消息中的错误字符(我在其中写入textField.Text),并且我希望将textField的键盘保持在屏幕上,直到用户提供正确的输入。如何做到这一点?先谢谢你。macOS Catalina 10.15.6上的Xcode 11.6 struct ContentView: View { @State private var value: Int? = ni

我的iOS SwiftUI允许用户输入一个Int。如果用户键入错误的输入字符,例如“abc”而不是“123”,我希望在我的文本中显示错误消息中的错误字符(我在其中写入textField.Text),并且我希望将textField的键盘保持在屏幕上,直到用户提供正确的输入。如何做到这一点?先谢谢你。macOS Catalina 10.15.6上的Xcode 11.6

struct ContentView: View {
    @State private var value: Int? = nil;
    @State private var text: String = "";

    var body: some View {
        VStack {
            TextField(
                "Enter an integer:",
                value: $value,
                formatter: NumberFormatter(),
                onCommit: {
                    guard let value: Int = self.value else {
                        self.text = "Bad input \"\(textField.text)\".";
                        //Do not dismiss the TextField's keyboard.
                        return;
                    }
                    //Dismiss the TextField's keyboard.
                    self.text = "The product is \(2 * value).";
                }
            )
            .keyboardType(.numbersAndPunctuation)
            .textFieldStyle(RoundedBorderTextFieldStyle())

            Text(text)
        }
        .padding([.leading, .trailing], 16)
    }
}


下面的代码为您提供了在用户键入时验证文本字段中文本的方法

struct ContentView: View {

@State private var textNumber    : String = ""
@State private var isNumberValid : Bool   = true

var body: some View {
    VStack {
        
        TextField("Enter an integer:", text: numberValidator())
            .keyboardType(.numbersAndPunctuation)
            .textFieldStyle(RoundedBorderTextFieldStyle())
        
        if !self.isNumberValid {
            Text("Bad input \"\(textNumber)\".")
                .font(.callout)
                .foregroundColor(Color.red)
        }
    }
    .padding([.leading, .trailing], 16)
}

private func numberValidator() -> Binding<String> {
    return Binding<String>(
        get: {
            return self.textNumber
    }) {
        if CharacterSet(charactersIn: "1234567890").isSuperset(of: CharacterSet(charactersIn: $0)) {
            self.textNumber = $0
            self.isNumberValid = true
        } else {
            self.textNumber = $0
            //self.textNumber = ""
            self.isNumberValid = false
        }
    }
  }
}
struct ContentView:View{
@国家私有变量textNumber:String=“”
@国家私有变量isNumberValid:Bool=true
var body:一些观点{
VStack{
TextField(“输入整数:”,text:numberValidator())
.键盘类型(.numbers和标点符号)
.textFieldStyle(RoundedBorderTextFieldStyle())
如果!self.isNumberValid{
文本(“错误输入\”(文本编号)\”)
.font(.callout)
.foregroundColor(颜色:红色)
}
}
.padding([.前导,.尾随],16)
}
私有函数numberValidator()->绑定{
返回绑定(
获取:{
返回self.textNumber
}) {
if CharacterSet(charactersIn:“1234567890”).issupertet(of:CharacterSet(charactersIn:$0)){
self.textNumber=$0
self.isNumberValid=true
}否则{
self.textNumber=$0
//self.textNumber=“”
self.isNumberValid=false
}
}
}
}

以下代码片段为您提供了在用户使用Get,Setvalue键入时验证文本字段中文本的方法

    let checkValue = Binding<String>(
        get: {
            self.value
        },
        set: {
            self.value = $0
        }
    )
let checkValue=Binding(
获取:{
自我价值
},
设置:{
self.value=$0
}
)
我希望它能对你有所帮助

struct ContentView: View {
    @State private var value: String = ""
    @State private var text: String = ""

    var body: some View {
        let checkValue = Binding<String>(
            get: {
               self.value
            },
            set: {
                self.value = $0
            }
        )

        return VStack {
            TextField("Enter an integer:",text: checkValue)
            .keyboardType(.numbersAndPunctuation)
            .textFieldStyle(RoundedBorderTextFieldStyle())

            Text("Bad interger: \(Int(self.value) != nil ? "" : self.value)").foregroundColor(Color.red)
        
        }
        .padding([.leading, .trailing], 16)
    }
}
struct ContentView:View{
@国家私有变量值:String=“”
@国家私有变量文本:String=“”
var body:一些观点{
让checkValue=Binding(
获取:{
自我价值
},
设置:{
self.value=$0
}
)
返回VStack{
TextField(“输入整数:”,文本:checkValue)
.键盘类型(.numbers和标点符号)
.textFieldStyle(RoundedBorderTextFieldStyle())
文本(“坏整数:\(Int(self.value)!=nil?”:self.value)”).foregroundColor(Color.red)
}
.padding([.前导,.尾随],16)
}
}

TextField目前无法实现此类功能。您需要在UITextField上使用representable。