【问题标题】:change font color of empty uitextfield更改空 uitextfield 的字体颜色
【发布时间】:2014-07-03 04:52:41
【问题描述】:

我有一个 UITextfield,当文本字段等于“test”时,我想清除文本字段并将字体颜色更改为绿色。下面的代码几乎可以完成它。

- (void)editingDidBegin:(id)sender {
    UITextField *txtfld = (UITextField*)sender;
    if ([txtfld.text isEqualToString:(@"test")]) {
        txtfld.text = @" ";
        [txtfld setFont:regularFont];
        [txtfld setTextColor:[UIColor greenColor]];
    }
}

唯一的问题是我想改变:

txtfld.text = @" ";

到:

txtfld.text = @"";

当我这样做时,字体颜色保持原来的黑色。如果我将其保留为@" ",则字体将变为绿色。有任何想法吗?提前致谢。

场景: (1) 用户在文本字段中不输入任何内容并单击提交按钮 - 有效 (2) 提交按钮用单词“test”更新文本字段并将其变为红色 - 有效 (3) 当用户返回文本字段时我希望删除单词 test 并且当用户键入所有文本时绿色。 - 不工作

注意:我把我的代码放在“Editing Did Begin”事件中,因为我认为当用户去更新字段时,它应该清除文本并允许他们输入绿色字体。

【问题讨论】:

  • 尝试更改为 txtfld.text = nil;文字颜色保持黑色?
  • 代码看起来很好......我很困惑。但先尝试设置颜色,然后清除文本字段。您将无法看到它,但可能会解决问题

标签: ios uitextfield


【解决方案1】:

有趣的是,当您将 text 设置为 @"" 或 nil 并在 UIControlEventEditingDidBegin 事件处理程序中设置 textColor 时,textColor 不会像以往那样设置。所以希望以后再设置textColor,也可以看看代码中的cmets:

- (IBAction)textEditingDidBegin:(id)sender
{
    UITextField *field = (UITextField *)sender;
    if ([field.text isEqualToString:@"test"]) {
        [field setText:@""];
        [self performSelector:@selector(setColor:) withObject:sender afterDelay:0.01];
        [field setFont:[UIFont fontWithName:@"Georgia" size:15]];
    }
}

- (void)setColor:(id)sender
{
    // See this line of code closely, do NOT use sender, use textField property in your view controller class
    [self.textField setTextColor:[UIColor greenColor]];
}

【讨论】:

    【解决方案2】:

    我刚刚测试了您的代码。它应该工作。您正在恢复其他地方的颜色。

    您可以使用以下代码在新的单视图项目中对其进行测试:

    #import "ViewController.h"
    
    @interface ViewController () <UITextFieldDelegate>
    @property (nonatomic, weak) IBOutlet UITextField *textField;
    -(IBAction)checkColor:(UIButton *)sender;
    @end
    
    @implementation ViewController
    
    -(void)checkColor:(UIButton *)sender {
        _textField.text = @"check color";
    }
    
    -(void)textFieldDidEndEditing:(UITextField *)textField {
        if ([textField.text isEqualToString:@"test"]) {
            textField.text = @"";
            textField.textColor = [UIColor greenColor];
        }
        else {
            textField.textColor = [UIColor darkTextColor];
        }
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
        return NO;
    }
    @end
    

    【讨论】:

    • 有趣的是,为什么它会导致使用 @"" 而不是 @" " 进行还原?
    • 我不确定它是否应该在结束编辑中,请在下面找到完整的场景。场景:(1) 用户在文本字段中不输入任何内容并单击提交按钮 - 有效 (2) 提交按钮使用单词“test”更新文本字段并将其变为红色 - 有效 (3) 当用户返回文本字段我希望删除单词 test 并且当用户将所有文本键入为绿色时。 - 不起作用注意:我将上面的代码放在“Editing Did Begin”事件中,因为我认为当用户去更新字段时,它应该清除文本并允许他们输入绿色字体
    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2013-11-14
    • 2014-01-19
    • 2015-01-02
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多