ユーザーが文字を削除できない UITextField に文字を永久に追加する方法はありますか? 単一の文字を追加したいのですが、ユーザーはそれを削除できませんが、後で文字を追加することはできます。
乾杯、
psこれはiOS用です
ユーザーが文字を削除できない UITextField に文字を永久に追加する方法はありますか? 単一の文字を追加したいのですが、ユーザーはそれを削除できませんが、後で文字を追加することはできます。
乾杯、
psこれはiOS用です
AUITextField
には、範囲内の文字を変更する必要があるというデリゲート メソッドがあります。このメソッドは基本的に、次の文字を追加または削除する必要がありますか? そこから、あなたが望むものを口述することができます。ここにいくつかのコード例があります。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
BOOL shouldChangeCharacters = ( (textField.text.length + string.length) > 1 );
return shouldChangeCharacters;
}
このコードは、追加される新しい文字と現在のテキストが 1 より大きい場合は変更しても問題ないことを意味し、テキストが 1 より大きくない場合は変更を行いません...
ここで、誰かがあなたのキャラクターに貼り付けようとする可能性があることを想定して、このデリゲート メソッドは引き続き呼び出されますが、いくつかのことを行う必要があります。
if (range.location == 0) {
NSString* firstCharacter = [string substringToIndex:1];
BOOL firstCharacterIsDesiredCharacter = [firstCharacter isEqualToString:@"#"];
if ( !firstCharacterIsDesiredCharacter ) {
NSString* symbolWithText = [NSString stringWithFormat:@"#%@",text];
// ******************** \\
[textView setText:symbolWithText];
return NO;
// or we could do this
string = symbolWithText;
// ******************** \\
}
}
どちらのシナリオも、パラメーターの値を変更しています...一部の人々はそれを好まない. それは悪いプログラミング方法である可能性があります..または、それらを変更する場合は、最初に実行する必要があるプロセスがあります。
それで、最初の文字を置き換えようとしている場合にのみ、このコードを実行する必要があります。ハッシュタグ記号を置き換えました。最初の文字は、位置0の範囲と長さ1です。したがって、範囲が0に等しい場合、それからコードを実行して修正します。このコードは、特殊なシンボルを貼り付けている可能性も考慮しています。したがって、UITextField
#work を読み取り、"work" または "#work" をコピーしようとすると、両方のシナリオが考慮され、ハッシュ マークが最初の文字である場合はコードが完全にスキップされます。
これを試して
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
label.text = @"left";
label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
textField.leftViewMode = UITextFieldViewModeAlways;
textField.leftView = label;
これを使用してみてください:
あなたの.hで:
IBOutlet UITextFeild *textFeild;
あなたの.mで:
- (BOOL)textFieldShouldReturn:(UITextField *)textFeild {
NSString *textFeildText = textFeild.text;
textFeild.text = [NSString stringWithFormat:@"string you want to always add %@",textFeildText];
return NO;
}
これは、ユーザーがテキスト ボックスを編集しているときに常に表示されるとは限りませんが、Enter キーを押すと、テキスト ボックスに自動的に追加されます。このコードを使用する場合、テキスト フィールドに必要な文字列がデフォルトで含まれていないことをお勧めします。そうしないと、次のような結果になる可能性があります。
String you want to add String you want to add Hello World!
私が提供するコードを使用するだけで、デフォルトで常にフィールドに入れたい文字列を入れないのであれば、問題ありません。リターンをタップした後にキーボードを自動的に非表示にしたい場合は、これを textFeildShouldReturn メソッドの 'return NO' ステートメントの上に追加します。
[textFeild resignFirstResponder];