2016-07-04 5 views
0

У меня есть TextView «TexV», которые имеют собственный класс «TexV_Class», унаследованный от UITextView и у меня есть ViewController «ВК» с пользовательского класса под названием «VC_Class»Как сделать делегат из двух классов UITextView?

Теперь, как я могу сделать оба класса «TexV_Class» и Делегат «VC_Class» и заставить их работать вместе? Возможно ли, что один и тот же метод делегата (например, textViewDidChange) в классах BOT работает (оставив последовательность выполнения на данный момент)

Я хотя и сделал делегат обоих классов, но только один запуск (из VC_Class с использованием методов делегирования textView)

+0

Если вам действительно нужно это (вы можете захотеть пересмотреть ваше приложение структуру первой), посмотрите на [MultiDelegate] (https: // cocoapods.org/pods/MultiDelegate) или [ILABMultiDelegate] (https://cocoapods.org/pods/ILABMultiDelegate). Есть некоторые gotchas, использующие эти классы, но хорошо документированные. –

ответ

1

Вы не можете. Механизм делегата работает с помощью одного объекта обратного вызова, если вы хотите, чтобы на одном делегате вы могли реагировать более одного элемента, вы можете обойти это одним из двух способов:

1- Оформить уведомление на одном из ваших делегатов, чтобы что другой делегат может действовать соответствующим образом.

2- установить пользовательский делегат на TexV_Class, который соответствует методу UITextView, который хочет принять VC_Class, и заставить TexV_Class вызвать этот делегат из его обратного вызова делегата.

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;