2

UITextField コントロールに注目すると、ボタンをサブビューとして追加します。UITextField からフォーカスを外すと、追加ボタンが削除されます。これは、UITextField にテキストがある場合に機能します。ただし、テキストがない場合、ボタンは消えません。

Q. How can I remove the UIButton from UITextField when the UITextField is empty. 
I also want to be able to show *default* placeholder-text for UITextField when add button is removed.

unbutton をサブビューとして追加および削除するコードは次のとおりです

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    if(textField == txtToEmailAddress)
    {
        txtToEmailAddress.rightView = button;
        txtToEmailAddress.rightViewMode = UITextFieldViewModeAlways;
        [button addTarget:self action:@selector(AddEmailAddress:) forControlEvents:UIControlEventTouchUpInside];

        [self.txtToEmailAddress addSubview:button];
    }
    if(textField == txtCallPhoneNum)
    {
        txtCallPhoneNum.rightView = button;
        txtCallPhoneNum.rightViewMode = UITextFieldViewModeAlways;
        [button addTarget:self action:@selector(AddPhoneNumber:) forControlEvents:UIControlEventTouchUpInside];
        [self.txtCallPhoneNum addSubview:button];
    }
    if(textField == txtTextNumbers)
    {
        txtTextNumbers.rightView = button;
        txtTextNumbers.rightViewMode = UITextFieldViewModeAlways;
        [button addTarget:self action:@selector(AddTextNumber:) forControlEvents:UIControlEventTouchUpInside];
        [self.txtTextNumbers addSubview:button];
    }

    return YES;
}



- (BOOL)textFieldDidEndEditing:(UITextField *)textField
{
    UIButton *button = nil;


    if(textField == txtToEmailAddress)
    {
        button = (UIButton *)[txtToEmailAddress.subviews objectAtIndex:1];
    }
    if(textField == txtCallPhoneNum)
    {
        button = (UIButton *)[txtCallPhoneNum.subviews objectAtIndex:1];
    }
    if(textField == txtTextNumbers)
    {
        button = (UIButton *)[txtTextNumbers.subviews objectAtIndex:1];
    }

    if (button != nil)
    {
            button.hidden = YES;
        [button removeFromSuperview];
    }


    return YES;
}

これは、削除する必要がある空の UITextField の追加ボタンです。

ここに画像の説明を入力

4

3 に答える 3

1

このブロックでボタン削除アクションを実行します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if(newString.length==0) {
         button.hidden=YES;
         textField.text=@"Default text";
    }

    return YES;
}
于 2013-01-21T04:02:25.227 に答える
1

コードは正常に動作しますが、ボタンとtextFieldDidEndEditing:メソッドのインデックスに問題があります

まずは

プレースホルダー テキストとテキスト フィールドにテキストがある場合、ボタンのインデックスは 2 です。

次に、メソッドは次のように実装する必要があります

- (void)textFieldDidEndEditing:(UITextField *)textField

そして最後にコードに最適化を追加すると、作業コードは次のようになります

-(void)textFieldDidBeginEditing:(UITextField *)textField{

     UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
     textField.rightView = button;
     textField.rightViewMode = UITextFieldViewModeAlways;
     [button addTarget:self action:@selector(AddTextNumber:) forControlEvents:UIControlEventTouchUpInside];
     [textField addSubview:button];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    UIButton *button = nil;
    NSLog(@"textField>>%@",[textField.subviews description]);
    if([textField.text isEqualToString:@""])
        button = (UIButton *)[textField.subviews objectAtIndex:2];
    else
        button = (UIButton *)[textField.subviews objectAtIndex:1];

    if (button != nil)
    {
        button.hidden = YES;
        [button removeFromSuperview];
    }
}

これは、 dotnetのテキスト ボックスの Focus() メソッドと完全に同じように機能するはずです :)ボタンを非表示にするために textField を設定する必要はありません。

于 2013-01-21T06:45:04.250 に答える