0

ここで、l1、l2、l3、l4 はUILabels です。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"%d",textField.text.length);

     if (textField.text.length==0)
    {
        l1.text=@".";
        l2.text=@"__";
        l3.text=@"__";
        l4.text=@"__";
    }else if (textField.text.length==1)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@"__";
        l4.text=@"__";
    }else if (textField.text.length==2)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@".";
        l4.text=@"__";
    }else if (textField.text.length==3)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@".";
        l4.text=@".";
    }
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 4) ? NO : YES;

}

ここで、出力は次のようになります...

textfield は 1234 で、ラベルは . . . .

正常に動作していますが、ユーザーがテキスト フィールドから文字を削除すると、次の結果が得られます。

"123" . . . . "12" . . . . 「1」。. . _ "" . . _ _

私が期待しているのは、テキストフィールドに文字が含まれていない場合、私のラベルには_ _ _ _が表示されるということです

4

3 に答える 3

1

ユーザーがそのフィールドを編集した結果のテキストを見たいとします。これを行うには、新しい文字列を作成します。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *editedText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    NSLog(@"%d",editedText.length);

    if (editedText.length==0)
    {
        l1.text=@"__";
        l2.text=@"__";
        l3.text=@"__";
        l4.text=@"__";
    }
    else if (editedText.length==1)
    {
        l1.text=@".";
        l2.text=@"__";
        l3.text=@"__";
        l4.text=@"__";
    }else if (editedText.length==2)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@"__";
        l4.text=@"__";
    }else if (editedText.length==3)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@".";
        l4.text=@"__";
    }else if (editedText.length==4)
    {
        l1.text=@".";
        l2.text=@".";
        l3.text=@".";
        l4.text=@".";
    }
    return (editedText.length > 4) ? NO : YES;

}
于 2013-10-21T13:24:22.613 に答える
0

if編集が承認され、アクションが実行された後にテキスト フィールドに表示される実際のテキストに基づいて、ステートメントを作成する必要があります。を使用if (textField.text.length==0)すると、何もない状態で開始し、文字を追加してテキスト フィールド内の 1 文字になると想定していることになります。これは有効な想定ではありません。

The current text in と を一緒に使用しtextFieldて、実際の結果テキストを取得します ( )。rangereplacementStringstringByReplacingCharactersInRange:withString:

これにより、フィールドにテキストをカット アンド ペーストするユーザーにも対応できることに注意してください。

于 2013-10-21T13:18:28.857 に答える