swift UITextField で文字数チェックをしたかったら、UITextFieldTextDidChangeNotificationを使ったらいい感じになった
UITextFieldで文字数チェックをするときに、textField:shouldChangeCharactersInRange:replacementString:を最初使っていたんですが、このメソッドが呼ばれるタイミングが、文字列が確定する前なんですよね。 なので、文字列を変換したり、カスタムキーボード(ATOKなど)とかを使っているとうまく動作しないことがあります。あと、フリック入力をしないで「う」(「あ」を3回押して)とかを入力するとうまく動かないです。
そこで、使うのが、UITextFieldTextDidChangeNotificationです。
これは、notificationという仕組みを使っていて、notificationについては下記を参照してください。 developer.apple.com NSNotificationCenter - iPhoneアプリ開発の虎の巻
このUITextFieldTextDidChangeNotificationを使うと、文字列が確定してから呼ばれるため、textFIeldに入っている文字列をそのまま(おそらく正確に)取得することが可能です。
実装方法は下記みたいな感じでなんとかなるかと思います。
class hoge:UIViewController{ var textField:UITextField; override func viewDidLoad(){ super.viewDidLoad() textField = UITextField() //ここで、notificationをセットします。 NSNotificationCenter.defaultCenter().addObserver(self, selector:"textFieldDidChange:", name: UITextFieldTextDidChangeNotification, object: nil) } //上記でselecterにセットしたメソッドが呼ばれます。 func textFieldDidChange(notification:NSNotification){ //ここで文字数を取得して、いい感じに処理します。 let length = textField.text.length } }
もっとちゃんと書いてあるサイト iOS で文字数制限つきのテキストフィールドをちゃんと作るのは難しいという話 - blog.niw.at