【问题标题】:I want to apply a setting globally (to all text UIViews in my app)我想全局应用一个设置(到我的应用程序中的所有文本 UIViews)
【发布时间】:2012-11-29 08:56:19
【问题描述】:

我有一堆文本视图,现在我想在所有这些视图中打开自动调整大小。我不想单独突出显示每一个,我只想将更改应用于应用程序中的所有文本视图。所以我不想修改框架。我一定会选择最佳答案。

编辑:我想我应该在前面提到我正在使用情节提要。

【问题讨论】:

  • “我一定会选择最佳答案。” - 我也是。 What have you tried?
  • 恐怕我还没有尝试过任何东西。我什至不知道它是否可以完成,因为文本视图和控制器没有链接到自定义类。
  • 您是否尝试过使用外观代理?它可能有一些长期风险,但它应该有效。

标签: ios xcode


【解决方案1】:

在 iOS 5.0+ 中,您应该能够像这样使用 UITextView 的外观代理:

[[UITextView appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];

这将使所有 UITextView 的响应都具有灵活的宽度和高度。这是一个关于如何将代理用于其他 UI 控件的精彩教程:

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

已编辑:

这段代码应该可以工作,我已经在模拟器和 iPhone 上直接测试过,即使 UIView.h 中的 autoresizingMask 属性没有用 UI_APPEARANCE_SELECTOR 标记。 This post 似乎表明属性可能没有此标志,但仍服从来自外观代理的消息。综上所述,@rmaddy 是对的。长期依赖这个可能是有风险的。

【讨论】:

  • 您只能对标有UI_APPEARANCE_SELECTOR 的属性使用appearance 代理。 UIView autoresizingMask 不是这样的属性。你真的尝试过你建议的代码还是这是一个猜测?
  • 我已经尝试了代码并且它在模拟器中工作(我知道著名的遗言),即使我没有看到 UIView.h 中 autoResizingMask 属性上标记的 UI_APPEARANCE_SELECTOR。仔细研究一下,this answer 似乎表明即使 UI_APPEARANCE_SELECTOR 没有针对给定属性标记,它仍然可能有效。
  • 有趣。我将该行添加到我自己的项目中,它并没有像我想象的那样崩溃。但我不知道它是否真的将调整大小蒙版应用于每个文本视图。顺便说一句 - 您发布的代码中有一对额外的方括号。
  • 确实有额外的括号。刚刚删除它们。我也刚刚在运行 iOS 6.0.1 的 iPhone 5 上进行了测试,没有任何问题。 UITextViews 展示了弯曲的宽度和高度。代码有效,但文档使它看起来不应该。
  • 我对依赖这个感到非常厌倦。它现在可能工作,但它是未记录的行为,它可能会在 iOS 6.1 或其他一些未来更新中停止工作。
【解决方案2】:

一种选择是继承UITextView 并创建CustomTextView。在其init 方法或layoutSubviews 方法中,设置自动调整大小掩码,然后在您的项目中使用该CustomTextView。使用init 方法进行设置的一个优点是,您可以稍后覆盖此自动调整大小掩码。

【讨论】:

  • 如果在xib中添加视图怎么办? init 没有被正确调用?
  • 不确定,因为我不使用 xibs。在这种情况下应该有一些方法会被调用。这应该在那里添加。应该调用像layoutSubviews 这样的东西。或者检查loadNibNamed 或类似的东西是否被调用。这是在一个地方执行此操作的最佳方式。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 2011-10-14
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多