Diciembre de 2017. Swift 4.
Tenga cuidado de que gran parte del código de ejemplo que verá en línea con respecto a este problema esté muy desactualizado .
Pegue lo siguiente en cualquier archivo Swift de su proyecto. Puedes nombrar el archivo como quieras, por ejemplo, "Handy.swift".
Esto finalmente soluciona uno de los problemas más estúpidos en iOS:
Sus campos de texto ahora tienen un .maxLength
.
Está completamente bien establecer ese valor en el guión gráfico durante el desarrollo, o configurarlo en código mientras la aplicación se está ejecutando.
import UIKit
private var __maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let l = __maxLengths[self] else {
return 150
}
return l
}
set {
__maxLengths[self] = newValue
addTarget(self, action: #selector(fix), for: .editingChanged)
}
}
func fix(textField: UITextField) {
let t = textField.text
textField.text = t?.prefix(maxLength)
}
}
Es así de simple.
Nota al pie: en estos días, para truncar de forma segura un String
in swift, simplemente.prefix(n)
Una versión única aún más simple ...
Lo anterior corrige todos los campos de texto en su proyecto.
Si solo desea que un campo de texto en particular se limite a decir "4", y eso es todo ...
class PinCodeEntry: UITextField {
override func didMoveToSuperview() {
super.didMoveToSuperview()
addTarget(self, action: #selector(fixMe), for: .editingChanged)
}
@objc private func fixMe() { text = text?.prefix(4) }
}
¡Uf! Eso es todo al respecto.
(Solo por cierto, aquí hay un consejo muy útil similar relacionado con UIText View ,
https://stackoverflow.com/a/42333832/294884 )
Para el programador de TOC (como yo) ...
Como recuerda @LeoDabus, .prefix devuelve una subcadena. Si eres increíblemente cariñoso, esto
let t = textField.text
textField.text = t?.prefix(maxLength)
sería
if let t: String = textField.text {
textField.text = String(t.prefix(maxLength))
}
¡Disfrutar!