如何制作UITextView的两个Classes委托?

时间:2016-07-04 08:27:08

标签: ios delegates uitextview uitextviewdelegate

我有一个textView" TexV"它有一个自定义类" TexV_Class"继承自UITextView,我有一个viewController" VC"使用名为" VC_Class"

的自定义类

现在我该如何制作这两个课程" TexV_Class"和" VC_Class"委托并让他们一起工作?是否有可能在BOTH类中运行相同的委托方法(例如textViewDidChange)(暂时保留运行顺序)

我虽然已经使两个类都委托但只有一个运行(运行了textView委托方法的VC_Class)

2 个答案:

答案 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;