Не удается превратить строку текстового поля в int в textFieldShouldReturn

#swift #xcode #textfield

#swift #xcode #Текстовое поле

Вопрос:

Я пытаюсь использовать textFieldShouldReturn to, чтобы мое текстовое поле контролировало ширину изображения при вводе значения, но когда я пытаюсь преобразовать текст в моем текстовом поле в значение Int, оно отображается как nil в моей консоли.

 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    let text = textField.text
    let numText = Int(textField.text!)
    if widthPer.text == text {
        print(text!)
        print(widthPer.text!)
        print(numText!) //returns nil
        squareOneWidth.constant = CGFloat(numText!) * 2
        slider.value = Float(numText!)
        calPercentage()
        calPercentageTwo()
    } 
    return true
}
 

Я также разрешаю пользователю вводить только числа от 10 до 90. Я думаю, что это может иметь какое-то отношение к моей функции, позволяющей это. Как я могу решить проблему?

 func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    let num = Double(textField.text!)

    if num! < 10 {
            textField.text = "10%"
    } else if num! > 90 {
            textField.text = "90%"
    } else if num! >= 10 || num! <= 90 {
            textField.text = String(Int(num!))   "%"
    }
    //print(num!)
    return true
}
 

Ответ №1:

Это потому, что к тому времени, когда вы пытаетесь преобразовать свое textField значение в an Int , вы уже обновили его значение до «%», поэтому оно возвращается nil , потому что «31%» — это не число.

Я бы посоветовал сохранить значение исходного числа в a var , чтобы вы могли вспомнить его, когда оно вам понадобится

 var originalNumber = 0

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
let num = Double(textField.text!)
originalNumber = Int(textField.text)

if num! < 10 {
        textField.text = "10%"
} else if num! > 90 {
        textField.text = "90%"
} else if num! >= 10 || num! <= 90 {
        textField.text = String(Int(num!))   "%"
}
//print(num!)
return true
}


func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
let text = textField.text
let numText = originalNumber
if widthPer.text == text {
    print(text!)
    print(widthPer.text!)
    print(numText!) //returns nil
    squareOneWidth.constant = CGFloat(numText!) * 2
    slider.value = Float(numText!)
    calPercentage()
    calPercentageTwo()
} 
return true
}
 

Комментарии:

1. У меня есть проблема с возможностью ввода чисел больше 90 и меньше 10, но основная проблема решена.

2. Если оно превышает 90 или меньше 10, это, похоже, влияет на изображение, как я могу это отрицать?