每当应用程序加载时,我必须在一个地方更改所有UILabel颜色。我知道有一种方法可以通过设置textColor来单独更改UILabel的颜色。因为这是花时间以编程方式或使用StoryBoard更改所有UILabel个体的过程。
我需要知道通过在一个地方添加textColor来改变标签颜色的方法。即使是改变控制器标签颜色也很好。例如。通过UILabel类别的方式。
任何代码段都有助于我实现这一目标。单个Controller的UIlabel颜色的代码很好。
答案 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}}。
我实现了如上所述的CustomLabel类。这是代码:
owningViewController