読者です 読者をやめる 読者になる 読者になる

@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

UITextFieldの本当の文字数をみてなかた

ほんたったで写経したり、設計書や資料集やらを置いて捗りまくりです。

EDISON ほんたった赤(ハードケース入り)

EDISON ほんたった赤(ハードケース入り)

本題

UITextFieldを2つ、UIButtonを1つの画面を作っていて、
UITextFieldが2つともN文字以上の場合のみ、UIButtonを有効にしたい

こういう時、UITextFieldDelegateを使いますよね。
UITextFieldDelegate Protocol Reference

たぶん、使うのはshouldChangeCharactersInRangeだと思うんですけど、
なんか思い通りにいかなくて。

hogeTextFieldの長さを取得するのに、

int hogeLen = hogeTextField.text.length;

こうしてるんだけど、

1文字入力
hogeLen :0

1文字削除
hogeLen :1

なんでだよーと思ってたら、ようはdelegateで捕まえてきた時の入力前の状態なのね。

というわけで、shouldChangeCharactersInRangeの引数を使って解決。

まとめ

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{    
    NSMutableString *str = [textField.text mutableCopy];
    [str replaceCharactersInRange:range withString:string];

    /*
      * あとはlengthをとって、文字数オーバならNOを返せばいいし、
      * 問題ないなら、そのhogeTextField.selected = YESとかしちゃって、
      * 他UITextFieldのselectedをみつつ、条件が合致すれば、button.enabled でいいかも
      */
 
    return YES;
}