检测何时绘制UITextFiled

时间:2016-05-02 04:45:40

标签: ios oop uitextfield

我已经将UIViewController子类化为启用主题策略。

也就是说,我的所有UIViewControllers扩展了名为MyUIViewController的版本override viewWillLayoutSubviews。因此,当页面加载时,我可以调用我的setupView方法,这将为我正确设置我的背景和其他样式和动画。

我为UITextField做了同样的事情。然而,我遇到的问题是,我无法在UITextField类中找到每次出现视图时调用的方法。

基本问题是,UITextFields viewWillLayoutSubviewsviewDidLoad是什么。

部分解决方案:

如果没有任何东西被调用,我有以下解决方案,我不喜欢。

  1. 使用ViewController,遍历视图控制器具有的所有子视图,如果给定视图的类型为UITextField,则在我的扩展中调用静态方法来设置其式

  2. 将我的子类UITextField注册到通知中心,当我更改主题时,发出通知。

  3. 我已经测试了上面的两种方法并且它们确实有效,但它们并不像让类本身在视图中做它需要做的那样好。

    总结一下,我想知道是否有一种方法可以在UITextField类中覆盖,每当视图生效时都会通知我。

1 个答案:

答案 0 :(得分:2)

方法func didMoveToSuperview()继承自UIView类,只是覆盖它,并检查superview值是否与nil不同,这需要子类{{1 }}。

  

讨论此方法的默认实现不执行任何操作。   子类可以覆盖它,以便在每次执行时执行其他操作   超视变化。

但在我看来,你过于复杂,你能解释一下你想用文本字段做些什么吗?
[UPDATE]
要将主题应用于整个视图控制器视图,您可以执行许多操作。使用UItextFieldNSNotification查看控制器的简单方法。
当您的视图控制器加载了视图时,将调用viewDidLoad()方法,这意味着如果您不在运行时添加视图,那么您的UI也将在此时加载。在这里,您可以调用方法viewDidLoad() - 当然,您需要以某种方式传递ThemeObject - 您可以在其中应用子视图自定义。如果要在运行时更改主题,您还可以使用applyTheme(theme:ThemeObject)并在用户选择主题后调度其中一个主题。所有注册的观察员都可以调用NSNotification方法并添加他们的自定义 如果你想稍微抽象一下这个行为,你可以创建一个协议" Themable "并在协议扩展中为每种applyTheme(theme:ThemeObject)子类添加实现。

我只想记住,UIKit提供了一个名为UIApperence的类似协议,通过谷歌搜索你可以找到custom implementations,它真的是一个非常强大的协议值得一看。< / em>的