iPhone UITextField 背景颜色

Posted

技术标签:

【中文标题】iPhone UITextField 背景颜色【英文标题】:iPhone UITextField background color 【发布时间】:2010-12-30 14:32:38 【问题描述】:

我无法用borderStyle= UITextBorderStyleRoundedRect 控制UITextField 的背景颜色。使用这种边框样式,backgroundColor 属性似乎只能控制圆角矩形内边缘的一条非常窄的线。该字段的其余部分保持白色。

但是,如果borderStyle 设置为UIBorderStyle=UITextBorderStyleBezel,则UITextField 的整个背景由其backgroundColor 属性控制。

这是一个功能吗?有没有办法用borderStyle=UITextBorderStyleRoundedRect 控制UITextFieldbackgroundColor

【问题讨论】:

如果我是你,我会将 Peter Johnson 的回复标记为答案。 如何通过为圆形矩形添加背景图像和边框样式来使文本字段完美工作? 当我们为圆角矩形添加边框样式时,背景属性对这个uitextfield有效如何解决这个问题? 【参考方案1】:

要更改 UITextField 中的背景颜色,您首先需要在 Interface Builder 中或以编程方式使用与“圆形”样式(例如“无边框”样式)不同的文本字段样式。

然后您可以使用

轻松更改背景颜色
textField.backgroundColor = backgroundColor;

textField 是你的 UITextField,backgroundColor 是 UIColor。

作为进一步的提示 - 如果您希望恢复圆角外观,您首先需要

#import <QuartzCore/QuartzCore.h>

然后设置

textField.layer.cornerRadius=8.0f;
textField.layer.masksToBounds=YES

让这个功能发挥作用

【讨论】:

请记住,当视图在表格视图中多次绘制时,操作视图层会显着降低性能。【参考方案2】:

其他答案在具有圆角矩形样式的 UITextField 上没有阴影。在尝试了许多选项之后,我终于在 UITextField 上放置了一个 UIView,具有相同的框架和自动调整大小的蒙版,将 alpha 设置为 0.3,并将背景设置为蓝色。然后我使用 Peter Johnson 的答案中的 sn-p 将圆形边缘从彩色叠加视图中剪掉。此外,取消选中 IB 中的“启用用户交互”复选框,以允许触摸事件向下级联到下面的 UITextField。现在看起来很完美。

副作用:你的文本也会被着色(不管它是不是黑色)

#import <QuartzCore/QuartzCore.h>

colorizeOverlayView.layer.cornerRadius = 6.0f;
colorizeOverlayView.layer.masksToBounds = YES;

【讨论】:

【参考方案3】:

这比我们想象的要容易得多。

当使用 colorWithRed:green:blue: 设置背景颜色时,颜色应该是浮点数并且应该是 1 的小数。例如:

[myTextField setBackgroundColor:[UIColor colorWithRed:255.0f/255.0f green:110.0f/255.0f blue:110.0f/255.0f alpha:1];

当您执行此操作时,所有 TextField 样式似乎都可以工作。

另见:background color not working as expected

【讨论】:

这不是问题。 UITextField 在使用边框时不支持背景颜色。【参考方案4】:

视图层次结构的转储显示UITextField 有一个UITextFieldRoundedRectBackgroundView 类型的子视图,而该子视图又具有12 个UIImageViews。

Erica Sadun 的 older article 显示了一个额外的 UILabel,Apple 显然在更高版本的 SDK 中删除了它。

摆弄UIImageViews 并没有太大变化。

所以答案是:可能没有办法改变背景颜色。

【讨论】:

【参考方案5】:

Jacob 的答案是这里最好的答案,因为它允许您将阴影保留在 RoundedRect 文本框下方,因此为 Jacob +1!

要详细说明他的解决方案,你需要这样做:

    UIView *textFieldShadeView=[[UIView alloc] init];
[textFieldShadeView setFrame:myTextFiled.frame];
textFieldShadeView.layer.cornerRadius=8.0f;
textFieldShadeView.layer.masksToBounds=YES;
textFieldShadeView.backgroundColor=[UIColor blueColor];
textFieldShadeView.alpha=0.3;
textFieldShadeView.userInteractionEnabled=NO;
[self.view addSubview:textFieldShadeView];
[textFieldShadeView release];

其中 myTextFiled 是您尝试更改背景颜色的圆角矩形文本字段。执行上述操作,您将获得 Jacob 的蓝色文本字段以及相应的阴影。

【讨论】:

感谢您将它们放在一起。一种改进是将彩色视图添加为文本字段的子视图(以 0 为原点框起来),而不是容器视图的子视图。这样,您可以枚举容器的子视图而不会产生额外的垃圾,并且如果您在自动旋转期间进行任何自定义重构,所有内容都会一起运行。您可能还想将添加的视图的自动调整大小掩码设置为 UIViewAutoresizingFlexibleWidth,这是唯一重要的选项。【参考方案6】:
...
textField.opaque = YES;
textField.backgroundColor=[UIColor blueColor];
textField.layer.cornerRadius=8.0f;
textField.layer.masksToBounds=YES

【讨论】:

【参考方案7】:

你可以这样做:

textField.backgroundColor = [UIColor whiteColor];

在这种情况下,我用白色做,但你可以用另一种颜色做uiColor

希望对你有帮助

【讨论】:

使用圆角矩形,这将产生问题中提到的海报颜色的细边。

以上是关于iPhone UITextField 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 UITextField 背景颜色

UItextfield不呈现背景颜色

交换 UITextField 的 isEnabled 更改背景颜色以及如何防止它

无法在 UISearchController 中为 UITextField 设置正确的背景颜色

如何在 textContentType = .newPassword 的 UITextField 中更改“强密码”指示器的背景颜色

UITextField 边框颜色