Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在绘制UITextField时检测_Ios_Oop_Uitextfield - Fatal编程技术网

Ios 在绘制UITextField时检测

Ios 在绘制UITextField时检测,ios,oop,uitextfield,Ios,Oop,Uitextfield,我已将UIViewController子类化,以启用主题化策略 也就是说,我所有的UIViewControllers都扩展了名为MyUIViewController的版本,该版本在viewWillLayoutSubviews上有一个override。因此,当加载页面时,我可以调用我的setupView方法,该方法将为我正确设置背景以及其他样式和动画 我对我的UITextField做了同样的事情。然而,我遇到的问题是,我在UITextField类中找不到每次视图出现时都会调用的方法 基本问题是什么

我已将
UIViewController
子类化,以启用主题化策略

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

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

基本问题是什么是
UITextFields
viewWillLayoutSubviews
viewDidLoad

一些解决方案:

如果没有什么被调用,我有以下我不喜欢的解决方案

  • 使用
    ViewController
    ,遍历视图控制器拥有的所有子视图,如果给定视图的类型为
    UITextField
    ,则在其扩展名中调用静态方法以设置其样式

  • 向通知中心注册我的子类
    UITextField
    ,当我更改主题时,发送通知

  • 我已经从上面测试了这两种方法,它们确实有效,但是它们不如让类本身在视图中完成它需要做的事情那么好


    总而言之,我想知道在
    UITextField
    类中是否有我可以重写的方法,它将在每次视图激活时通知我。

    方法
    func didmovetoserview()
    继承自
    UIView
    类,只需覆盖它,并检查
    superview
    值是否与
    nil
    不同,这将需要对
    UItextField
    进行子类化

    讨论此方法的默认实现不起任何作用。 子类可以重写它,以便在 superview更改

    但在我看来,你太复杂了,你能再解释一下你想对文本字段做什么吗?
    [更新]
    要将主题应用于整个视图控制器视图,您可以做很多事情。最简单的方法是使用查看控制器的
    NSNotification
    s和
    viewDidLoad()

    当视图控制器加载其视图时,将调用
    viewDidLoad()
    方法,这意味着如果您在运行时不添加视图,那么此时也将加载UI。在这里,您可以调用一个方法
    applyTheme(主题:ThemeObject)
    ——当然您需要以某种方式传递ThemeObject——在这里您可以应用子视图自定义。如果您想在运行时更改主题,还可以使用
    NSNotification
    并在用户选择主题后调度其中一个主题。所有注册的观察者都可以调用
    applyTheme(主题:ThemeObject)
    方法并添加他们的自定义项。
    如果您想稍微抽象一下行为,可以创建一个协议“主题表”,并在协议扩展中为每种
    UIView
    子类添加实现。


    我还想记住,UIKit提供了一个类似的协议,通过谷歌搜索,你可以发现,这是一个非常强大的协议,值得一看。

    用户可以选择他们希望在应用程序中使用的“主题”。目前,这意味着字体和背景色。这意味着我需要更改字体、字体颜色、字体大小和边框颜色。我很想知道你是否有其他方法来解决这个问题。这对我来说也很复杂。我花了一些时间来尝试你的答案。我可以确认它的工作。