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提供了一个类似的协议,通过谷歌搜索,你可以发现,这是一个非常强大的协议,值得一看。用户可以选择他们希望在应用程序中使用的“主题”。目前,这意味着字体和背景色。这意味着我需要更改字体、字体颜色、字体大小和边框颜色。我很想知道你是否有其他方法来解决这个问题。这对我来说也很复杂。我花了一些时间来尝试你的答案。我可以确认它的工作。