我正在开发一个在Interface Builder中使用的新组件,它将UIPickerView子类化为创建一个类似于UIDatePicker的接口,但也包括秒。我希望使用我的组件的开发人员能够从库中拖动一个新的Object,将其配置为TimePickerView类,并从那里使用它。
这一点完美无缺,但现在我想实现标准UIDatePicker中可用的一些事件,特别是“Value Changed”事件。我不知道如何在不使用委托协议的情况下以这种方式声明事件。我也不确定如何让XCode知道对象上可用的事件。因此,我真的问了三个问题:
由于这似乎不容易做到,我怀疑这可能是有原因的;因此,我也很感激我的方法和论据的评论,为什么我应该创建一个委托协议来实现这一点。
答案 0 :(得分:1)
在Objective C和cocoa框架中,没有什么比声明一个事件(就像你在C#中所做的那样),使用委托模式实现事件的相同行为(这是所有cocoa类处理的方式)事件),所以用这种方式实现具有委托模式的自定义事件,例如:
协议和自定义类接口声明:
@protocol myDelegate <NSObject>
-(void)valueChanged:(double) value;
@end
@interface UAKTestDelegate : UIPickerView
@property(weak) id<myDelegate> delegate;
@end
实施中的某个地方(触发事件):
//Example of firing the event ....
if([[self delegate] respondsToSelector:@selector(valueChanged:)]) {
[[self delegate] valueChanged:1.0];
}
所以,答案的第一部分应该解决你帖子中的前两个问题(创建和触发自定义事件),但对第三个答案的回答只是 你不能< / em> ...
Xcode(在本例中为接口构建器)知道UIControl(或其子类)实现的事件,但是没有办法告诉它你自己的自定义事件。
所以我认为在您的情况下(如果可以的话)您可以直接子类化UIDatePicker,并在需要时最终覆盖valueChanged。