【问题标题】:UITextField problems in iOS 5 by changing UITextFieldBorderStyle at runtime通过在运行时更改 UITextFieldBorderStyle 在 iOS 5 中的 UITextField 问题
【发布时间】:2011-10-13 19:57:34
【问题描述】:

现在我在 iOS 5 设备上测试时突然遇到一些 UITextFields 的问题,即使我在 iOS 5 SDK 中构建了应用程序并且已经让错误溜走发布。

我有一个允许输入的文本字段,当您按下“锁定”按钮时,它会调用:

textField.enabled = NO;
textField.borderStyle = UITextBorderStyleNone;

字段“隐藏”,但仍像标签一样 - 对应用程序来说很重要。

然后你再次按下“锁定”按钮,它会调用:

textField.enabled = YES;
textField.borderStyle = UITextBorderStyleRoundedRect;

这在 4.2/4.3 中完美运行,但在 iOS 5 中,唯一出现的是文本字段的斜面轮廓,没有白色背景色。

设置 .backgroundColor 可以在 iOS 5 上修复它,但在 4.2/4.3 上会产生丑陋的白色方块。

我在 API 差异文档中没有看到任何关于这些更改的信息,我在这里遗漏了什么? 提前谢谢..

【问题讨论】:

  • 您是否为您的应用启用了 ARC?您似乎正在尝试访问已释放的对象。
  • 是的 ARC 已开启,但这是我第一次遇到这个问题。我尝试重新排序东西并将其放在有效的属性前面,但没有任何区别
  • 我遇到了完全相同的问题!我刚刚创建了一个小项目来隔离该问题而无需更改启用。我意识到这是一个释放问题,但不明白为什么。使用 NSZombieEnabled 我检测到一个僵尸。奇怪的是,它只发生在从UITextBorderStyleRoundedRect 切换到UITextBorderStyleNone 时。如果在 Storyboard 中将初始边框样式设置为 None,则反向不会崩溃。而是将初始值设置为 RoundedRect 应用程序崩溃。似乎 TextField 以某种方式被释放了。
  • @REDMX 有这方面的消息吗?我有一个问题:您使用的是哪个版本的 XCode?您是否也在使用 SnowLeopard 版本(内部版本:4C199)?我在想这是否可能是一个原因,因为它不完全支持 ARC。

标签: ios uitextfield ios5


【解决方案1】:

如果你对白色背景没问题,我会修复这个问题,注释掉指定背景颜色的行并将 opaque 属性设置为 NO

//[myTextField setBackgroundColor:[UIColor whiteColor]];

[myTextField setOpaque:NO];

这已经解决了 iOS 4.3 和 iOS 5.0 的问题

-亚历克斯

【讨论】:

  • 在 iOS 4.3 和 iOS5.0 上都为我工作
【解决方案2】:

userInteractionEnabled 是更通用的UIView 类的属性,因此对于UIControl 的子类(例如UITextField)可能不会像您预期的那样运行。相反,您应该将enabled 属性设置为NO 以暂时禁用控件,在UITextField 的情况下,这将完全符合您的要求。

【讨论】:

  • oops - 我实际上正在使用 .enabled 属性,但输入错误。我会更改帖子,所以很遗憾它不能解决问题
  • 您的崩溃程序与设置边框样式或启用属性没有任何关系——它们都是标量。这样就留下了文本字段本身,正如 Bartosz 所建议的那样,它很可能正在被释放。您是否尝试过在 iOS 5 上不使用 ARC 进行编译?
  • 关闭 ARC 并没有解决这个问题
  • 您能否发布textField 属性的声明,以及任何向其发送releaseautorelease 的代码?
  • 您可能还想展示声明textField 属性的对象是如何被管理的。对象可能是被释放的对象。
【解决方案3】:

一种可能的解决方法是将alpha 设置为0.00001。这为您提供了有效隐藏的标签,这些标签仍然可以响应控制事件。

【讨论】:

  • 问题是我需要文本像标签一样可见
  • 在这种情况下,只需将userInteractionEnabled 设置为NO。或者将text 复制到实际的UILabel 中(或者UITextView 更适合多行文本),然后取消隐藏。
【解决方案4】:

我遇到了类似的问题,并且 UITextBorderStyleNone 在 iOS 4.3 中工作正常,但在 iOS 5 上停止工作。我认为这是来自 Apple 的错误,因为它在设备和模拟器上都不起作用。我认为您最好的方法是根据需要在标签和文本字段之间切换,就像 darvids0n 建议的那样,直到 Apple 解决该错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2015-12-05
    相关资源
    最近更新 更多