子类化UITextField

时间:2012-11-24 13:05:59

标签: objective-c ios uitextfield subclassing

我是新手,我正试图了解子类的实现。

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

我(在故事板中)使viewController成为我的子类textFields的委托。

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

但是这些方法只在viewcontroller上启动,而不是在我的子类中。在viewcontroller对它们做任何事情之前,我想访问这些。

改写,我仍然希望它能够解雇,但我还想在子类对象中执行操作,但仍然在主文件中使用完整方法。作为一个例子,当用户点击返回时,我希望子类对象直接处理键盘的丢弃,但是仍然可以触发viewcontrollers方法。

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

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

我很感激任何指点,谢谢

1 个答案:

答案 0 :(得分:2)

听起来好像你已经很好地掌握了子类化但可能是委托问题。

代表的观点是一个(唯一)对象代表另一个做一些工作。当你需要多个对象对某事做出反应时,通知是一种更好的策略。

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

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