2016-08-08 6 views
3

사용자가 텍스트 필드에 하나 이상의 십진수를 입력하지 못하도록하고 사용자가 텍스트 필드에 알파벳 문자를 입력하지 못하도록하기 위해 아래 코드를 참조하십시오. 문제는 함수 내에서 그것들을 검사하는 방법을 알지 못한다는 것과 두번째 If 문이 두 번째 문이 실행되지 않는다는 것을 의미한다는 것을 의미합니다. 십진수를 검사하는 코드를 가져 와서 문자 검사기 코드를 그대로두면 완벽하게 작동합니다. 둘 다 어떻게 작동시킬 수 있습니까?텍스트 필드에서 알파벳 문자 비활성화 (내 코드 일부는 실행되지 않습니다)

답변

1

기능이 작동하지 않는 이유는 긍정적 인 경우와 부정적인 경우가 일찍 결정된다는 것입니다. 그것은 단지 하나를 취하면서 모든 검사, 모든 검사하기 위해 성공해야합니다 : 이것은 결정의 전부 아니면 아무것도 논리를 반영

if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
    // Do not allow multiple decimal separators 
    return false 
} 
if replacementTextHasLetter != nil { 
    // Do not allow letters 
    return false 
} 
return true 

: 함수의 끝까지 true을 반환

연기 변경을 거부하는 검사에 실패했습니다.

+0

이제 명백하게 보입니다. 답변 해 주셔서 감사합니다! – Anonan

0
let existingTextHasDecimalSeparator = textField.text?.range(of: ".") 
let replacementTextHasDecimalSeparator = string.range(of: ".") 

let charactersNotAllowed = NSCharacterSet.letters 
let replacementTextHasLetter = string.rangeOfCharacter(from: charactersNotAllowed) 

if existingTextHasDecimalSeparator != nil, replacementTextHasDecimalSeparator != nil{ 
    if replacementTextHasLetter != nil{ 
     return false 
    } 
    return false 
} else { 
    if replacementTextHasLetter != nil{ 
     return false 
    } 
    return true 
} 

위와 같이 개선 할 수는 있지만 여러 자릿수와 문자를 허용하지 않는 방법입니다. 그것은 작동합니다.