수색…


소개

사용자 정의 UITextField를 사용하여 텍스트 필드의 동작을 조작 할 수 있습니다!

입력 텍스트 필터링을위한 사용자 정의 UITextField

다음은 숫자 텍스트 만 사용하고 다른 모든 텍스트는 삭제하는 사용자 정의 UITextField 의 예제입니다.

참고 : iPhone의 경우 번호 유형 키보드를 사용하여 쉽게 할 수 있지만 iPad의 경우 숫자가있는 키보드 만 있습니다.

class NumberTextField: UITextField {
    
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    registerForTextFieldNotifications()
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override func awakeFromNib() {
    super.awakeFromNib()
    keyboardType = .numberPad//useful for iPhone only
}

private func registerForTextFieldNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(NumberTextField.textDidChange), name: NSNotification.Name(rawValue: "UITextFieldTextDidChangeNotification"), object: self)
}

deinit {
    NotificationCenter.default.removeObserver(self)
}

func textDidChange() {
    text = filteredText()
}
private func filteredText() -> String {
    let inverseSet = CharacterSet(charactersIn:"0123456789").inverted
    let components = text!.components(separatedBy: inverseSet)
    return components.joined(separator: "")
}
}

따라서 입력 텍스트로 숫자 만 사용하는 텍스트 필드가 필요한 경우이 사용자 정의 UITextField를 사용할 수 있습니다.

복사, 붙여 넣기 등의 모든 작업을 허용하지 않으려면 사용자 지정 UITextField

UITextField 에서 복사, 붙여 넣기, 바꾸기, 선택 등의 모든 동작을 비활성화하려면 다음 사용자 정의 텍스트 필드를 사용할 수 있습니다.

class CustomTextField: UITextField {

var enableLongPressActions = false

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return enableLongPressActions
}
}

enableLongPressActions 속성을 사용하여 필요한 경우 나중에 언제든지 모든 작업을 활성화 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow