7

短いバージョン: ユーザーが最初にキーを押したときに UITextField ボックスにすべてのコンテンツを削除させるにはどうすればよいですか? ユーザーが何かを入力し始めるまで、情報を削除したくありません。つまり、編集の開始時にそれをクリアするだけでは十分ではありません。

ロングバージョン:ループする3つのUITextFieldがあります(リターンキーを使用し、「shouldReturn」メソッドでプレスをキャッチします。UITextFieldにはすでにテキストがあり、ユーザーが何も入力せずに次のUITextFieldに移動した場合、値はそのままにする必要があります(デフォルトの動作)。

しかし、ユーザーが入力を開始すると、最初にテキストが自動的にクリアされるようにしたいと考えています。フィールド全体を強調表示してから何かを入力すると、フィールドが削除され、ユーザーのキープレスが追加されます。

「編集開始時にクリア」は、フィールドにカーソルが表示された時点でテキストがすぐにクリアされるため、良くありません。それは望ましくありません。ここでプレースホルダーを使用できると思ったのですが、デフォルトでは機能せず、デフォルト値のプロパティが見つかりません。Highlighted プロパティと Selected プロパティは、この点に関しては何もしません。

4

7 に答える 7

2

私は人々の答えに感謝したいと思います。私はここで説明されている主な方法の両方を実装し、両方とも完璧に機能しました。しかし、それ以来、私ははるかに単純で優れた答えに出くわし、1行のコードしか含まれていません:)

textFieldのdidBeginEditingメソッドで、[self.textField selectAll:self];または[self.textField selectAll:nil];

私が見つけた元の答えは持っていましたselectAll:selfが、これはカット/コピー/貼り付けメニューを示しています。nil代わりに送信した場合self、メニューは表示されません。

この1行のコードを追加すると、textFieldに入るときにテキストが強調表示され(ユーザーに視覚的な手がかりが与えられます)、キーが押されたときにのみすべてが削除されます。

于 2012-11-26T13:28:13.040 に答える
2

のようにファイル内BOOLで変数を宣言します。.h

BOOL clearField;

そして、次のようなデリゲート メソッドを実装します。

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
   clearField = YES;
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
  clearField = NO;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
  clearField = NO;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if(clearField)
  {
     textField.text = @""
     clearField = NO;
  }
}
于 2012-11-16T13:36:27.403 に答える
2

と呼ばれるデリゲートメソッドがあります

textFieldDidBeginEditing:(UITextField*) tf{
  tf.startedEdinting = YES;
}

textFeildDidEndEditing: (UITextField*) tf {
  tf.startedEditing = NO;
}

カテゴリの startEditing を UITextField に追加します。

次に、値が変更された場合、フィールドをクリアします。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 if (textField.startEditing){
  textField.text = string;
 } else {
  textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
 }
}

次の方法で、プロパティを UITextField カテゴリに追加できます。

.h

@property (nonatomic, assign) BOOL startEditing;

.m

@dynamic startEditing;

- (void) setStartEditing:(BOOL)startEditing_in{ 
NSNumber* num = [NSNumber numberWithBool:startEditing_in]; 
objc_setAssociatedObject(self, myConstant, num, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
- (BOOL) startEditing{ 
NSNumber* num = objc_getAssociatedObject(self, myConstant); 
return [num boolValue]; 
}
于 2012-11-16T13:31:33.943 に答える
1

ユーザーがテキストを操作したときにテキストをクリアしたい場合、インターフェイス ビルダーには、テキスト フィールドを [編集開始時にクリア] に設定できるオプションがあります。

于 2013-08-27T01:28:44.627 に答える
1

同じ目的を満たす別のソリューションは、次のように定義されたテキスト フィールドプレースホルダーを使用することです。

The string that is displayed when there is no other text in the text field.

そのため、ユーザーが入力を開始するとすぐに、プレースホルダー テキストが消えます。

これは、ストーリーボードから、またはプログラムで設定できるものです。(はい、それを理解するのに2時間かかりました..解決策が文字通りコードの1行の変更であった場合)。

于 2013-03-08T14:38:00.500 に答える
0

textField の初期テキストの NSString 変数を宣言して初期化します

NSString *initialText=@"initial text";

次に、メソッドを実装します。

    -(void)textFieldDidBeginEditing:(UITextField *)textField
 {
    if(textField.text isEqualToString:initialText)
         { 
           textField.text=@"";
        }
   }

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    if(textField.text isEqualToString:@"")
    {
        textField.text=initialText;
    }
}
于 2015-03-18T11:04:29.017 に答える
0

次の方法を使用してみてください。

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {  
  if(isFirsttime==YES)
{
textfield.text==@"";
isFirsttime=NO;
}
return YES;
     }
于 2012-11-16T13:30:27.777 に答える