任何可能的方法在一个地方更改iOS移动应用程序的所有UILabel颜色?

时间:2017-09-02 15:08:43

标签: ios uilabel

每当应用程序加载时,我必须在一个地方更改所有UILabel颜色。我知道有一种方法可以通过设置textColor来单独更改UILabel的颜色。因为这是花时间以编程方式或使用StoryBoard更改所有UILabel个体的过程。

我需要知道通过在一个地方添加textColor来改变标签颜色的方法。即使是改变控制器标签颜色也很好。例如。通过UILabel类别的方式。

任何代码段都有助于我实现这一目标。单个Controller的UIlabel颜色的代码很好。

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题。您可能不应该使用tintColor属性,因为Apple打算将其作为可点击的项目的视觉提示。

我建议创建UILabel的自定义子类。我们称之为ColorChangingLabel。定义NotificationCenter通知名称labelColorChanged,并在广播该通知时,将键/值对textColor添加到包含新文本颜色的通知的userInfo中。如果您希望能够更改它,还可以添加可选的背景颜色键/值对。 (实际上,您可以添加一整套不同的键/值对,以便更改自定义标签的不同属性。)

在您的自定义UILabel子类中:

  • 定义函数addLabelColorChangedObserver()。有那个 函数调用NotificationCenter为你的添加一个观察者 labelColorChanged通知,在通知的textColor中查找userInfo并使用该颜色更改标签的文字颜色。

  • 覆盖init(frame:)init(coder:)并使用这些方法 拨打addLabelColorChangedObserver()功能。

  • 为您的UILabel子类实现deinit方法,删除它 观察者。

在您的应用中,当您希望标签更改其颜色时,请使用包含新文字颜色的userInfo字典发布通知。

完成所有操作后,请浏览所有应用的故事板,选择每个标签,然后使用“身份检查器”将对象的类更改为自定义ColorChangingLabel类。应该这样做。

编辑:

如果您希望能够基于视图控制器在视图控制器上定位颜色更改,则可以将标签设置为具有owningViewController属性,并且在设置时,它们将添加{{1 }}作为owningViewController参数,当他们将自己添加为object通知的观察者时。然后,要告诉单个视图控制器的标签更改其颜色,您需要将目标视图控制器的通知作为labelColorChanged参数发送。

这里棘手的一点是在标签上设置object属性。您需要一种方法,以便在加载视图控制器的视图时自动设置该方法。也许在您的视图控制器的viewDidLoad方法中,您将调用一个递归遍历视图控制器层次结构的方法,将其自身设置为所有owningViewController的{​​{1}}。

编辑2:

我实现了如上所述的CustomLabel类。这是代码:

owningViewController