UITextField に文字数制限を設定する : Objective-C プログラミング

PROGRAM


UITextField に文字数制限を設定する

UITextField で、入力文字数に制限をかけたい場合には、文字の入力の都度に呼び出される UITextFieldDelegate の "textField:shouldChangeCharactersInRange:replacementString:" メソッドを使用します。

このメソッドで NO を返した場合には、その文字入力を受け入れないことになるため、既に所定の文字数に達しているかを判断して、文字数を超えた入力となった場合には受け入れないという制御を行います。

// UITextField で入力を受け付けるかどうかを判断する UITextFieldDelegate メソッドです。

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string

{

BOOL result;

 

// 例えば文字数を 30 文字に制限します。

NSUInteger maxLength = 30;

 

// iPhone の Return キーが押された場合は "\n" が渡されてくるところに注意します。

if ([string compare:@"\n"] == 0)

{

// Return キーが押された場合は、文字数に限らず、それを受け入れるようにしておきます。

result = YES;

}

else

{

// Return キーではない場合には、最大文字数を超えないときだけ、受け入れるようにします。

NSUInteger textLength = textField.text.length;

NSUInteger rangeLength = range.length;

NSUInteger stringLength = string.length;

 

NSUInteger length = textLength - rangeLength + stringLength;

 

result = (length <= maxLength);

}

 

return result;

}

このようにすることで、UITextField に制限文字数を超える入力を行われようとした場合には、その入力を無視させることが可能です。

 

なお、上記でも少し触れていますが、iPhone や iPad で Return キーが押された場合には、UITextField には @"\n" という文字が入力されたことになるようです。

これを UITextField が受け入れて初めて "Did End On Exit" (UIControlEventEditingDidEndOnExit) イベントが発生するようなので、制限文字数を超えていても Return キーを押せるようにしたい場合は、@"\n" を受け入れ可能として YES を返す必要があるところに注意して実装するようにします。

[ もどる ]