LoginSignup
15
13

More than 5 years have passed since last update.

UITextField の文字数カウント

Last updated at Posted at 2016-01-31

これは何

Twitterなどでよく見る文字数カウントを実現する方法です。

image

UITextView の解説はよくありますが、UITextField のものは意外となかったのでメモしておきます。

やり方

UITextView の文字数カウント

例えば上記の記事と同じように shouldChangeTextInRange でやろうとすると一見問題なさそうなのですが、「゛(だくてん)」等も一文字としてカウントしてしまうため、カウントがずれます。

  1. おはよう で4文字
  2. おはようこ で5文字
  3. おはようご で6文字(おかしい)
  4. おはよう で5文字(おかしい)

なので、ShouldChange (入力前)ではなく DidChange (入力後)のデリゲートでカウントする必要があります。しかし、残念ながら UITextField にはそれが存在しません。

対策

UITextFieldTextDidChangeNotification で、入力後の通知を受け取れるようにします。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(textFieldDidChange:)
                                             name:UITextFieldTextDidChangeNotification
                                           object:_titleField];
NSNotificationCenter.defaultCenter().addObserver(self,
 selector:"textFieldDidChange:",
 name: UITextFieldTextDidChangeNotification,
 object: nil)

通知後に呼ばれるメソッドで文字数をカウントします。

- (void)textFieldDidChange:(NSNotification *)notification
{
    NSUInteger length = textField.text.length;
}
func textFieldDidChange(notification:NSNotification) {
    let length = textField.text.length
}

これで正しい文字数をカウントできるようになりました。

「入力した文字数」ではなく、入力できる「残り文字数」を表示したい場合は、最大文字数から引いてやれば良いですね。

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13