【问题标题】:UITextField background property issue in iOS6iOS6中的UITextField背景属性问题
【发布时间】:2014-11-07 09:13:38
【问题描述】:

我想创建UITextField,它在普通视图中看起来像一个标签,在编辑模式下看起来像一个带有自定义背景的文本字段。我在 XIB 中添加了一个“无边框样式”UITextField,并将出口设置为名称nameTextField。我在编辑模式下为UITextField 设置了背景,在按钮事件的视图模式下为nil 背景设置了背景,但是在iOS 6.x 中第一次消失后图像没有出现,其他一切都按预期工作。我已经在 iOS 7.x 中进行了测试,它按预期工作。代码是这样的,

- (IBAction)editButtonTapped:(id)sender
{
    editMode = !editMode;
    if (editMode)
    {
        nameTextField.background = [UIImage imageNamed:@"textbg.png"];
        nameTextField.enabled = YES;
    }
    else
    {
        nameTextField.background = nil;
        nameTextField.enabled = NO;
    }
}

测试用例:

  1. 点击编辑按钮,启用编辑和显示背景 -> 出现背景和字段 已按预期启用
  2. 再次点击编辑按钮,禁用编辑并隐藏背景 -> 背景按预期消失
  3. 再次点击编辑按钮,启用编辑并显示背景 -> 字段已启用编辑但没有背景。

【问题讨论】:

  • 你能分享一下Textfield的屏幕截图吗

标签: ios objective-c ios6 background uitextfield


【解决方案1】:

感谢您的 cmets。

我认为这是一个 iOS 6.x 错误;如果 UITextField 的 background 属性在 viewDidAppear 或之后设置为 nil,则以后对 background 属性的更改将不会被绘制。

解决此问题的方法是使用空白透明图像而不是 nil。 该图像可以以两种方式之一使用,

1 ) 通过代码设置背景(textbg.png和blank_image.png);那么代码会是这样的,

- (IBAction)editButtonTapped:(id)sender
{
    editMode = !editMode;
    if (editMode)
    {
        nameTextField.background = [UIImage imageNamed:@"textbg.png"];
        nameTextField.enabled = YES;
    }
    else
    {
        nameTextField.background = [UIImage imageNamed:@"blank_image.png"];
        nameTextField.enabled = NO;
    }
}

2 ) 在XIB中设置背景(textbg.png)和禁用背景(blank_image.png);那么代码会是这样的,

- (IBAction)editButtonTapped:(id)sender
{
    editMode = !editMode;
    if (editMode)
    {
        nameTextField.enabled = YES;
    }
    else
    {
        nameTextField.enabled = NO;
    }
}

【讨论】:

  • 好吧,我们现在使用的是 iOS 12,但我刚刚遇到了类似的行为,其中设置 UITextField 的背景颜色效果很好。但是,隐藏视图并再次显示它会产生意想不到的结果(背景消失或 alpha 通道更改)。按照这里的建议使用图像来修复它。
【解决方案2】:

尝试这样做

在Interface Builder中,就在你设置背景图片的地方下面,应该有一个选择边框样式的选项,默认选择的是RoundedRect,选择其他样式就可以立即看到背景图片。

【讨论】:

  • 嗨,我已经选择了“无边框样式”文本字段并通过代码设置背景(已发布)。我尝试在 XIB 中设置背景。如果我第一次点击,背景会按预期消失,但如果我再次点击,则图像不会出现。
  • 这个问题来自设备或模拟器?
  • 同时使用设备和模拟器。
  • 试试这个,去掉nameTextField.background = nil;并替换 nameTextField.background = [UIImage imageNamed:@""];
猜你喜欢
  • 2018-11-03
  • 2014-01-06
  • 2021-10-17
  • 2015-05-20
  • 2010-11-05
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多