ユーザーが入力したばかりの現在の入力文字を知りたいです。古い入力文字列と新しい入力文字列を比較することは機能しているようですが、それは私が最後に試したいことであるに違いありません。何か提案はありますか?iOS SDKには、これをより良い方法で実行できるメソッドがいくつかあると思います。
3 に答える
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
UITextFieldDelegateからあなたを助けるはずです。
これは、テキストを置き換えるためだけでなく、ユーザーがキーボードのキーを押すたびに呼び出されます。(範囲の長さは0になり、場所は現在の挿入位置になります)。
詳細については、ドキュメントを参照してください: http: //developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/doc/uid/TP40006991-CH3-SW9
文字が入ってくるときに文字列を比較したい場合は、
[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
-(void)compareInput
{
if ([textField.text isEqualToString:compareString])
NSLog(@"They're the same!");
}
デリゲートより:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
文字通り文字を比較したいだけなら、デリゲート メソッドで十分です。変数string
には、入力された文字が含まれます。
たとえば、ユーザーfoo
が UITextField に入力すると、上記のメソッドで次のようになります。
ユーザー タイプ: f
、これは起こります:
[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
すぐに呼び出しcompareInput
、手紙f
は textField.text 経由で利用できます。
-(void)compareInput
{
NSLog(textField.text); //prints `f`
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(textField.text); //prints nothing
return YES;
//after returning YES, textField.text will contain `f`
}
ユーザー タイプ: o
、これは起こります:
[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
compareInput
すぐに呼び出し、文字列fo
は textField.text を介して利用できます。
-(void)compareInput
{
NSLog(textField.text); //prints `fo`
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(textField.text); //prints `f`
return YES;
//after returning YES, textField.text will contain `fo`
}
よくわからないかもしれませんが、少しでも参考になれば幸いです!
このメソッドは、UITextField の現在の入力を表示します
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *letters;
if ([textField.text isEqualToString:@""]){
letters = string;
}else if ([string isEqualToString:@""]){
if ([textField.text length] > 0) {
letters = [textField.text substringToIndex:[textField.text length] - 1];
}
}else{
letters = [textField.text stringByAppendingString:string];
}
NSLog(@"letters %@\n", letters);
return YES;
}