- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是一个相当复杂的继承层次结构,所以请耐心等待(我试图简化事情,而不是陈述我正在使用的确切情况,后者更复杂):-
假设我创建了 UITextField
的子类称为 TextField
这是我自己定制的增强型通用文本字段。现在,为了提供这种增强功能,在 init
TextField
的方法| ,我设置了super.delegate = self
这样来自 UITextField
的所有委托(delegate)方法发送至TextField
. TextField
实现 UITextFieldDelegate
协议(protocol)并接收这些委托(delegate)方法来做一些有趣的事情。
但是,反过来,我想让它成为TextField
有它的自己的委托(delegate)。所以我创建了一个名为 TextFieldDelegate
的新协议(protocol)(注意缺少 UI
-前缀!)并给出 TextField
伊娃id<TextFieldDelegate> __weak delegate
具有相应的属性,以便其他类可以从 TextField
接收委托(delegate)方法.
我希望你仍然支持我,因为到目前为止我还没有做过任何太复杂的事情。但是现在,我创建了 TextField
的另一个自定义子类。 ,我们称它为PasswordTextField
(在现实生活中,人们可能不需要创建子类来实现密码功能,但我们假设有一些相当复杂的实现需要这样做)。
我们还假设我想做到 PasswordTextField
(类似于 TextField
具有委托(delegate)属性)能够发送一组增强的委托(delegate)方法。例如,也许它可以发送一个方法 passwordIsSecure
一旦密码达到所需的复杂程度,就会发送该密码。现在,由于在常规 TextField
中找不到这种行为,我创建了一个新协议(protocol):PasswordTextFieldDelegate <TextFieldDelegate>
它为 PasswordTextField
定义了新的委托(delegate)方法and 继承了 TextField
发送的所有委托(delegate)方法.
问题是:我如何在 PasswordTextField
中实现它? ?不起作用的东西:
继承
我不能简单地从 TextField
继承委托(delegate),因为 TextField
的委托(delegate)只符合 TextFieldDelegate
而不是 PasswordTextFieldDelegate
, 所以我不能发送类似 [delegate passwordIsSecure]
的方法因为TextFieldDelegate
没有这样的方法。
覆盖ivar
我可以尝试在 PasswordTextField
中声明一个 ivar称为委托(delegate),但编译器会提示这是一个重复的声明,因为当然在父类(super class)中已经有一个称为委托(delegate)的 ivar,所以这也不起作用*。
修改父类(super class)
我可以回到 TextField
类并重新定义委托(delegate)以同时实现 TextFieldDelegate
和 PasswordTextFieldDelegate
, 但这看起来很乱并告诉 TextField
它可以发送 PasswordTextFieldDelegate
方法,当然,它不能!
我还没有尝试过这个,只是因为它似乎打破了书中所有合理的编码规则。
总而言之,必须有一些方法可以做到这一点,这样一个类的子类就可以拥有自己的委托(delegate),它是父类(super class)委托(delegate)的子委托(delegate),并且所有这些都可以很好地组合在一起,但我就是不能'想不通!有什么想法吗?
(* 作为附带问题,我不明白为什么编译器会在 PasswordTextField
声明一个名为 delegate 的“重复”ivar 时提示,但在 TextField
声明一个名为 delegate 的 ivar 时却不提示,这大概是一个UITextField
的名为 delegate 的属性的副本!)
最佳答案
UITextField 委托(delegate) ivar 被命名为 _delegate,而不是委托(delegate)。因此,为什么您可以在 TextField 中再次声明它,而不是在 PasswordTextField 中。
至于你的委托(delegate)继承问题。我不确定 ObjectiveC 是否支持您想要的。
您可能只需要键入您的委托(delegate)“id”,而不是“id
关于iphone - Objective-C——子类中委托(delegate)的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8850182/
我看了很多文章,但我仍然不清楚我们通常创建的普通委托(delegate)和多播委托(delegate)之间的区别。 public delegate void MyMethodHandler(objec
考虑以下几点: Action a1 = new Action(_insert); Action a2 = new Action(a1); a2 指的是什么?它是 a1,a1 的浅拷贝还是 a1 的深拷
我希望这听起来像是一个显而易见的问题,但是委托(delegate)返回类型是否也必须与其委托(delegate)的方法的返回类型相匹配? EG,像这样: public static void Save
我想使用 Kotlin 委托(delegate),但我不想在委托(delegate)人之外创建委托(delegate)。委托(delegate)的所有示例都如下所示: interface Worker
class SuperClass { var delegate : SuperClassDelegate? } protocol SuperClassDelegate { func d
我有一个加载 View 的 View ,需要将 View 推送到主导航 Controller 。 我已经为每个 View 设置了一个委托(delegate),并且基本上使我的调用沿着“链”返回到主导航
为简单起见,假设我想创建一个自定义 UITextField 并向其添加一个简单的行为;也就是说,如果文本字段成为第一响应者,背景颜色将变为绿色。 为此,在我的自定义类中,我必须将该类设置为委托(del
我非常有信心我应该能够使用非静态方法的委托(delegate),但下面给了我一个错误: public class TestClass { private delegate void TestD
在 C# 中不能从 System.Delegate 或 System.MulticastDelegate 继承。只要您声明标准的“运行时托管”方法,就完全可以在 MSIL 中执行此操作。但是,每次我向
我在 Storyboard 中定义了一个 iPad 界面,带有一个 SplitViewController。我想将 SplitViewController 的委托(delegate)设置为指向详细 C
我有几个解析器。有一个顶级的可以委托(delegate)给另一个。 Parser我们从 Reader 中获取他们的输入(可变)。我只想要一个 Parser为了能够一次解析,只有一个解析器应该有 Rea
一直以来我都在阅读关于反射的文章,每个人都在说:“反射很慢”,“反射很慢”。 现在我决定测试速度有多慢,令我惊讶的是,使用反射创建的委托(delegate)实际上是使用 lambda 创建的委托(de
在 Xcode 4.5 中启动了 Cocos2D 2.1 模板(没有物理引擎),针对 iOS 6 和 iPad。在 CDAudioManager.m 文件中,以下代码... AVAudioSessio
以下是来自未管理的 dll 的函数代码。它接受一个函数指针作为参数,并简单地返回被调用函数返回的值。 extern __declspec(dllexport) int _stdcall callDe
//NewCharts.h #import @interface NewCharts : UIViewController @property(nonatomic,retain)IBOutlet U
鉴于以下 MSDN 示例代码,为什么我不能定义 Action 委托(delegate)“内联”: public static void Main(string[] args) { Action
在虚幻引擎中,UFUNCTION用于通过附加说明符来丰富功能,以用于蓝图使用、复制和委托(delegate)。 然而,一些委托(delegate)类型似乎不允许绑定(bind) UFUNCTION(如
我刚刚将照片选择器放入我的项目中,一切正常。唯一的事情是它坚持在我设置委托(delegate)的地方给我以下警告 - Assigning to 'id' from incompatible type
我有一个 UIImageView 的子类,并且想将 self 作为参数传递给委托(delegate)。我在 MyImageView 之前收到错误“预期 ')'”。我需要将对象传递给委托(delegat
我正在开发 iOS 10 的语音转文本功能。 我希望调用 SFSpeechRecognitionTaskDelegate 的委托(delegate)方法来检查完成的结果。 func speechRec
我是一名优秀的程序员,十分优秀!