我有一个textView" TexV"它有一个自定义类" TexV_Class"继承自UITextView,我有一个viewController" VC"使用名为" VC_Class"
的自定义类现在我该如何制作这两个课程" TexV_Class"和" VC_Class"委托并让他们一起工作?是否有可能在BOTH类中运行相同的委托方法(例如textViewDidChange)(暂时保留运行顺序)
我虽然已经使两个类都委托但只有一个运行(运行了textView委托方法的VC_Class)
答案 0 :(得分:1)
你不能。委托机制通过拥有一个回调对象来工作,如果您希望根据委托对多个项目作出反应,您可以通过以下两种方式之一来解决这个问题:
1-向您的一位代表发送通知,以便其他代表可以采取相应行动
2-在TexV_Class上设置一个自定义委托,它符合VC_Class想要采用的UITextView方法,并让TexV_Class从它的委托回调中调用该委托。
答案 1 :(得分:0)
我建议您使用3种方法:
1)使用NSNotificationCenter(模式帮助1对象传达一对多对象)
2)使用多播委托模式。实施细节,您可以参考此http://blog.scottlogic.com/2012/11/19/a-multicast-delegate-pattern-for-ios-controls.html
3)使用Proxy
设计模式。 (这种方式我选择)
class MyTextView.h
@protocol NJCustomTextViewDelegate <NSObject>
- textViewShouldBeginEditing:
- textViewDidBeginEditing:
- textViewShouldEndEditing:
- textViewDidEndEditing:
@end
@property (nonatomic, weak) id< NJCustomTextViewDelegate >textViewDelegate;
使用此:
in MyTextView.m
self.delegate = self;
- (void)textViewShouldBeginEditing:(UITextView)textView
{
// Handle business logi
// .... Do your logic here
if ([self.textViewDelegate responseToSelector:@selector(textViewShouldBeginEditing:)])
{
[self.textViewDelegate textViewShouldBeginEditing:self];
}
}
In MyViewController.m
MyTextView textView = ....
textView.textViewDelegate = self;