[Swift] UITextField νκΈ κΈμμ μ ν
μ΄λ² ν¬μ€ν μ UITextFieldμ νκΈμ λ ₯μ κΈμμ μ ννλ κΈ°λ₯μ μ 리νκΈ° μν¨μ λλ€!
μ΄λ²μ κ°λ°νλ©΄μ κΈμμ μ νμ΄ μλ λ©μΈμ§λ₯Ό 보λ΄λ κΈ°λ₯μ λ£κ² λλλ°, μμ΄λ μ΄λͺ¨μ§λ‘λ κΈμμ μ νμ΄ μ λμνλλ°, νκΈ μ λ ₯μ λ²κ·Έκ° μλλΌκ΅¬μ π
μλ₯Όλ€λ©΄ 5μ μ νμ΄λΌκ³ ν λ "κ°λλ€λΌγ " μ΄λ κ² "γ "λ₯Ό μΉμ§ λͺ»νκ² λκ±°λ, "κ°λλ€λΌλ§"μ μΉκ³ μΆμλ° "κ°λλ€λΌλ§"+"γ "μ΄ μ λ ₯μ΄ μλκ±°λ, "κ°λλ€λΌλ§"μμ κ³μ νμ΄νμ "λ§" λΆλΆμ νμ΄ννλ λ¬Έμκ° κ³μ μ λ ₯λκ±°λ γ γ κ·Έλμ κ²ͺμλ μνμ°©μ€λ₯Ό μ 리νλ©΄μ ν΄κ²°ν λ°©λ²μ μμ±ν΄λλ €κ³ ν΄μ!!
μλ§ μ΄ κΈμ λΉμΈκΈ° κΈμ΄λΌμ γ γ λꡬμκ² λ ΈμΆμ΄ λ μ§ μ¬μ€ μλͺ¨λ₯΄κ² μ§λ§.. μ΄κΉμ§ μ€μ ¨λ€λ©΄ μλμ μ½λλ λ³Έμ λ§μΌμ€κ±°μμ!
ꡬκΈλ§ν΄λ³΄λ©΄ TextFieldDelegateμμ μ 곡νλ shouldChangeCharactersIn λ©μλλ₯Ό ν΅ν΄ μ ννλ λ°©λ²μ΄ κ°μ₯ 보νΈμ μ΄κ³ μΌλ°μ μΈ λ°©λ²μ΄λλΌκ΅¬μ~~ shouldChangeCharactersIn λ©μλλ delegateλ‘ μ§μ λ textFieldμ λκ° νμ΄νμ΄ λλ©΄ λ€μ΄μ€κ² λλ λ©μλμμ~~
μ!! νΉμ μλμ μ½λκΉμ§ μλν΄λ³΄μ λΆμ΄λ©΄ μ ~~κΈ°μλ ν΄κ²°λ°©λ²μΌλ‘ λ°λ‘ skipνμ λ μ’μ΅λλ€ π
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// backspace νμ©
if let char = string.cString(using: String.Encoding.utf8) {
let isBackSpace = strcmp(char, "\\b")
if isBackSpace == -92 {
return true
}
}
guard let text = textField.text else { return false }
if text.count >= MAX_LENGTH {
return false
}
return true
}
μ΄λ κ² γ γ γ 5μμ λ ₯μ νμλ backspaceλ λ¨Ήν΅μ΄ λλ©΄ μλλκΉ, backspaceκ° μ λ ₯μΌλ‘ λ€μ΄μμλλ νμ¬ κΈμμμ μκ΄μμ΄ μ λ ₯λ°μ μ μλλ‘ μΈμ½λ©ν΄μ μ°Ύλ λ°©μμΌλ‘ μ μ©ν΄μ€¬μ΄μ!
μΌν 보면 μ λμνλ κ² κ°μ£ ~~? κ·Έλ°λ° μ¬κΈ°μ "κ°λλ€λΌλ§" + μμμ νμλ, λ°μΉ¨μ΄ μ λ ₯λμ§ μμμ. μ΄λ―Έ MAX_LENGTHλ‘ μ§μ ν 5μκ° λμλ€κ³ νλ¨νκΈ° λλ¬Έμ΄μ£ ~ κ·Έλμ γ γ shouldChangeCharactersIn λ©μλλ₯Ό ν΅ν΄μλ μλκ² κ΅¬λ μΆμμ΄μ.
PS. μ΄λ κ² νκΈμ λ ₯μ λ°μΉ¨μ΄ μ λ ₯λμ§ μλ λ²κ·Έκ° textField λμ textViewλ‘ μ μ©νλ©΄ λλ€λ ν¬μ€ν μ λ΄€λλ°, μ κ° μ§μ ν΄λ΄€μ΅λλ€. λκ°μ΄ μλ©λλ€. μκ°λλΉ νμ§λ§μΈμ~~
λ€λ₯Έ λ°©λ²μ μ°Ύμ보λ€κ°.. λ§μ½μ textFieldμ κΈμμλ₯Ό νμΈν΄μ μνλ κΈΈμ΄λ³΄λ€ κΈΈλ©΄ κ·Έλ₯ μλΌμ 보μ¬μ£Όλ©΄ λ§μΉ λ± κ·Έ κΈΈμ΄κΉμ§λ§ 보μ¬μ§μ§ μμκΉ? λΌλ μμ μΌλ‘ λ³κ²½ν΄λ΄€μ΄μ. shouldChangeCharactersIn μ΄ λ©μλλ κ³Όκ°ν λ²λ¦¬κ³ .. μ΅μ λ²λ₯Ό μΆκ°ν΄μ£Όμμ΄μ.
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: UITextField.textDidChangeNotification, object: nil)
UITextFieldμ λκ° λ³νκ° μκΈ°λ©΄ textDidChangeλΌλ λ©μλλ₯Ό νΈμΆνλλ‘ ν κ±°κ³ , μ΄ λ©μλλ μλμ κ°μμ.
@objc func textDidChange(noti: NSNotification) {
if let text = messageTextField.text {
if text.count >= MAX_LENGTH {
let fixedText = text.subString(startIndex: 0, endIndex: MAX_LENGTH - 1)
messageTextField.text = fixedText
}
}
}
κ·Έλ₯ λ΄κ° μ§μ ν κΈΈμ΄λ³΄λ€ κΈΈλ©΄ μ§μ ν κΈΈμ΄κΉμ§λ§ μ§€λΌμ€~ νκ³ λ§μ΄μ£ . κ·Έλ°λ°...
μ΄λ κ² γ γ 5μλΌκ³ νμλ 5μκΉμ§λ§ 보μ¬μ§λ건 λ§μμ..κ·Έλ°λ° λ μΉ λλ§λ€ 5λ²μ§Έ κΈμκ° λ°λμ΄λ²λ¦¬λ νμμ΄.. κ·Έλ¦¬κ³ μ§μ°λ κ³Όμ μμλ νμ΄ννλ λ¬Έμλ€μ΄ κ°μκΈ° λ§ λ±μ₯νλ κ·Έλ° κΈ°κ΄΄ν νμμ΄..λλ₯΄λ₯΄...γ γ γ
μ λ μ²μμλ λκ° bufferκ°μκ² μμ΄μ, κ±°κΈ°μ κΈ°λ‘λ λ¬Έμλ€μ΄ λμ€λ κ±°λΌκ³ μκ°μ νλλ°μ~ κ·Έκ² μλλλΌκ΅¬μ.
μμΈμ textFieldμ μ λ ₯ ν¬μ§μ (μ§κΈ μ λ ₯λμ΄μΌ ν μ리)κ° 6λ²μ§Έ κΈμκ° μλλΌ, 5λ²μ§Έμ λ¨Έλ¬Όλ¬ μκΈ° λλ¬Έμ΄μμ΄μ.
μ¦, "μΌμ΄μΌμ¬μ€" λΌκ³ νμ΄νμ νλ©΄ μ κ° μνλ μ λ ₯ ν¬μ§μ μ "μ€" λ€μμ μμΉν΄μ νμ΄νμ ν΄λ "μ€" μ΄νλ‘λ κ·Έλ₯ 지리기λ₯Ό λ°λ¬μ΄μ. νμ§λ§ μ€μ λ‘λ.. "μ€" μμΉμ μ λ ₯ν¬μ§μ μ΄ μ€μ λλ κ±°μ£ . κ·Έλμ "μ€"λΌλ ν¬μ§μ μ κΈμκ° κ³μ λ°λλ νμμ΄.. π
κ·ΈλΌ μ λ ₯ ν¬μ§μ λ§ "μ€" λ€λ‘ μ€μ ν΄μ£Όλ κΌΌμ(?)λ§ μμΌλ©΄ μ΄λ¨κΉ, μΆμ΄μ μλμ κ°μ΄ ν΄κ²°λ°©λ²μ μ°Ύμμ΄μ!
ν΄κ²°λ°©λ²
@objc func textDidChange(noti: NSNotification) {
if let text = messageTextField.text {
if text.count >= MAX_LENGTH {
let fixedText = text.subString(startIndex: 0, endIndex: MAX_LENGTH - 1)
messageTextField.text = fixedText + " "
let when = DispatchTime.now() + 0.01
DispatchQueue.main.asyncAfter(deadline: when) {
self.messageTextField.text = fixedText
}
}
}
}
μ΄λ κ² μ λ ₯ν λ¬Έμ λ€μ " " 곡백 νλλ₯Ό μΆκ°ν΄μ£Όλ©΄μ μ λ ₯ν¬μ§μ μ λ§μΉ "μ€"λ€μμΌλ‘ μμλ‘ λ§λ€μ΄ λ²λ¦¬λκ±°μ£ .
μλ¬Έμ΄λ μ΄λͺ¨μ§ λ±μ μν₯μ΄ μμ§λ§.. μ΄κ² νκΈμ΄ μ΄μ±, μ€μ±, μ’ μ±μΌλ‘ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ μ΄λ° μ²λ¦¬κ° νμνλλΌκ΅¬μ.
νλ©΄μμ λμμ μ ν΄κ²°ν κ² κ°μλ°.. κ·Έλλ μΈμ κΉμ§λ κΌΌμμ΄κΈ° λλ¬Έμ π
λ€λ₯Έ λ°©λ²μΌλ‘ νκΈμ λ ₯μ κΈμμ μ ννλ κ² κ΄λ ¨ν΄μ ν΄κ²°νμ λΆ μμΌλ©΄ 곡μ ν΄μ£Όμλ©΄ μ’μ κ² κ°μμ~~
κ·ΈλΌ μ€λλ λκ΅°κ°μκ² λμμ΄ λμκΈΈ λ°λμ π