>

UITextField에서 유효성 검사를 수행하고 있습니다. 숫자와 만 허용해야합니다. 캐릭터. 기본적으로 사용자는 다음과 같은 십진수를 입력 할 수 있습니다 :

1.0
1.23
1.45
12.47

또한 아래와 같이 텍스트 필드에서 편집하는 동안 % 부호를 추가해야합니다 :

When User enter 1, textfield should update 1 %
When User enter 1.2, textfield should update 1.2 %
When User enter 18.345, textfield should update 18.345 %

이를 달성하기 위해 아래 코드를 사용하고 있습니다 :

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
    if string.characters.count == 0 {
        return true
    }
    do {
        if textField == self.questionTextFeild {
            let nString = textField.text as NSString?
            let newString = nString?.replacingCharacters(in: range, with: string)
            let expression = "^([0-9]+)?(\\.([0-9]{1,8})?)?$"
            let regex = try NSRegularExpression(pattern: expression, options: .caseInsensitive)
            let numberOfMatches = regex.numberOfMatches(in: newString! as String, options: [], range: NSRange(location: 0, length: (newString?.characters.count)!))
            //textField.text = textField.text!
            if numberOfMatches == 0 {
                return false
            }
        }
    }
    catch let error {
    }
    return true
}

이것을 사용하여 숫자와 점 문자를 입력 할 수 있습니다. 내 문제는 어떻게 % 부호를 추가 할 수 있습니까? 제발 제안 해주세요

  • 답변 # 1

    입력하는 동안 마지막 숫자에 백분율을 추가하기 위해 업데이트 된 코드를 찾으십시오

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
            if string.count == 0 {
                return true
            }
            do {
                if textField == textField {
                    let nString = textField.text as NSString?
                    let newString = nString?.replacingCharacters(in: range, with: string)
                    if var textString = textField.text {
                        let unitString = " %"
                        if textString.contains(unitString) {
                            textString = textString.replacingOccurrences(of: unitString, with: "")
                            textString += string + unitString
                            textField.text = textString
                        } else {
                            textField.text = string + unitString
                        }
                    }
                    let expression = "^([0-9]+)?(\\.([0-9]{1,8})?)?$"
                    let regex = try NSRegularExpression(pattern: expression, options: .caseInsensitive)
                    let numberOfMatches = regex.numberOfMatches(in: newString! as String, options: [], range: NSRange(location: 0, length: (newString?.count)!))
                    //textField.text = textField.text!
                    if numberOfMatches == 0 {
                        return false
                    }
                }
            }
            catch let error {
                print(error.localizedDescription)
            }
            return true
        }
    
    

관련 자료

  • 이전 Dynamics 365에서 JavaScript를 사용하여 "완료"단추를 클릭 할 때 약속을 "완료"로 표시하는 방법
  • 다음 ios - GCD 블록에서 현재 방법을 반환하는 방법은 무엇입니까?