でカーソルが戻るのを防ぎたいUITextField
。または、既に入力されている 2 つの文字の間にテキストを入力できないようにする必要があります。これどうやってするの?
3 に答える
ユーザーが特定のテキスト フィールドで虫めがねを使用できないようにするプロパティまたはメソッドはありません。文字列内のすべての文字をブロックすることができます:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if(range.location < textField.text.length) return NO; else return YES;
}
いくつかの調査の後、私はこの質問を見つけました: UITextField で拡大鏡を無効にします。受け入れられた回答の著者は、それを行う方法があると言います:
ユーザーがフィールドをタップできないように、userInteractionEnabled を NO に設定することもできます。ユーザーはタップしてフォーカスできないため、フィールドがフォーカスされるように becomeFirstResponder を手動で呼び出します。
しかし、私が知ったsetUserInteractionEnabled:NO
ように、テキストフィールドがファーストレスポンダーにならないようにするため、機能しません。2 回目の調査の後、私は別の質問を見つけました: userInteractionEnabled = NO の場合でも firstResponder に UITextField キーボードを表示します。MaxGabrielユーザーは、それを行う方法を見つけたと主張しています。
隠しテキスト フィールドをビューに追加し、becomeFirstResponder を呼び出します。ユーザーは、このテキスト フィールドが存在することを知りません。テキスト フィールドからのデリゲート コールバックでは、ユーザーが入力したテキストを取得し、それを UITextView に追加します (ただし、質問のように UITextField のように、必要なものにテキストを追加できます)。可視テキスト ビューの userInteractionEnabled をオフにします。これにより、あなたが望む効果が生まれます。
Stack Overflow は巨大なデータベースです。質問する前に少し調べておくと、将来役に立つかもしれません。
カレットの移動を禁止することはできませんが、テキストがすでに入力された文字列内に入力されているかどうかをテストするためUITextFieldDelegate
のメソッドを使用できtextField:shouldChangeCharactersInRange:replacementString:
ます。そうでない場合は、テキストフィールドのテキストを手動で変更し、プロトコルのselectedTextRange
プロパティを使用してカレットを最後に移動します。UITextInput
UiTextField へのテキスト入力を停止するには、uitextfield デリゲート メソッドを使用する必要があります。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//Set tag for a textfield
if(textField.tag==10)
{
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength < [textField.text length]) ? NO : YES;
}
}
要件に従ってロジックを変更します。2 つの文字の間にテキストを入力できないようにするには NSRange を使用し、範囲のテキストフィールドのテキストがテキストフィールドのテキストの長さより短い場合は No を返します。テキストは UITextField に入力されません