子类化 UITextField

Posted

技术标签:

【中文标题】子类化 UITextField【英文标题】:subclassing a UITextField 【发布时间】:2012-11-24 13:05:59 【问题描述】:

我是新手,我正在努力了解子类化的实现。

我了解创建新文件并使其成为任何父类的子类的基本原理(在这种情况下,我选择了 UITextField)。我创建了自己的子类,然后将相应 UITextField 对象的身份检查器中的类更改为我的新类,简称为“myTextField”。我已经使用 SO 上其他地方的代码来修改占位符文本的表示,并且它工作正常(来自子类对象)。

我(在故事板中)将 viewController 设置为我的子类 textFields 的代表。

并根据需要触发适当的方法,例如在视图控制器 .m 文件中的“返回”按钮上激活 textFieldShouldReturn 方法。

但是这些方法只在视图控制器上触发,而不是在我的子类中。在视图控制器对它们做任何事情之前,我想访问这些。

换个说法,我仍然希望它按原样触发,但我也想在子类对象中执行一个操作,但在主文件中仍然有完整的方法触发。例如,当用户点击返回时,我希望子类对象直接处理键盘的放下,但仍然触发 viewcontrollers 方法。

这只是一个例子,可能是一个很差的例子,但想法是,我不一定要带走主视图控制器的原始方法的功能,我仍然希望它是委托;我只希望子类对象文件也能做一些工作。在此示例中,可能是放下键盘并播放叮当声。正如我所说,这是一个例子,行动本身是无关紧要的。但是让动作在我想要的地方执行是问题所在。

我知道我没有正确地理解子类化,如果我错过了一些非常基本的东西,我很抱歉。

感谢您的指点,谢谢

【问题讨论】:

【参考方案1】:

听起来好像您对子类化有很好的了解,但可能是委托问题。

委托的意义在于有一个(仅)对象代表另一个对象执行某些工作。当您需要多个对象来对某事做出反应时,通知是更好的策略。

对于您的示例,我可以看到两个选项。一种方法是让委托显式调用子类中的方法。另一种方法是让委托方法发布自定义通知,然后任何想要对此做出反应的对象。

在这两者之间进行选择取决于您希望解决方案的一般性或具体程度。

【讨论】:

我创建了子类,以便它可以处理默认情况下未完成的“额外”事情。我看到你对委托的看法并且现在明白了,但我有点(错误地)希望这个特性能够发生,因为我在子类中做到了。我会看看你说的这些自定义通知(还没有去过),看看我的进展如何。顺便说一句,我最好创建一个类别,然后在那里添加功能? 这完全取决于您所谈论的功能。您通常子类化以更改或扩展类的功能,但使用您的示例, UITextField 不会响应返回键,委托会响应。因此,除非您希望您的子类成为它自己的委托,否则这不是它的预期责任。 (如果您有一个没有自己的实例变量的子类,则通常可以选择将其实现为类别。) 感谢@Phillip,我将对此进行更多研究,尤其是通知方面。这不是我以前玩过的东西。

以上是关于子类化 UITextField的主要内容,如果未能解决你的问题,请参考以下文章

CAsyncSocket 没有子类化?

子类化导航控制器有啥用? [关闭]

麻烦子类化 SCNScene

UIViewController 的 Swift 子类化子类

子类化 UIAlertController

子类化 UItableViewCell 选择