Я хочу подклассировать UITextView и отправить новое сообщение делегату. Поэтому я хочу расширить протокол делегата. Каков правильный способ сделать это?
Я начал с этого:
Интерфейс:
#import <Foundation/Foundation.h>
@class MySubClass;
@protocol MySubClassDelegate <UITextViewDelegate>
- (void) MySubClassMessage: (MySubClass *) subclass;
@end
@interface MySubClass : UITextView {
}
@end
реализация:
#import "MySubClass.h"
@implementation MySubClass
- (void) SomeMethod; {
if ([self.delegate respondsToSelector: @selector (MySubClassMessage:)]) {
[self.delegate MySubClassMessage: self];
}
}
@end
однако я получаю предупреждение: '-MySubClassMessage:' not found in protocol(s)
.
У меня был один способ работы, когда я создал свой собственный ivar для хранения делегата, а затем сохранил делегат с помощью [super setDelegate]
, но это показалось неправильным. возможно, нет.
Я знаю, что могу просто пропустить id и пройти, но моя цель - убедиться, что компилятор проверяет, что любой делегат, предоставленный MySubClass, соответствует протоколу MySubClassDelegate.
К дальнейшему clairfy:
@interface MySubClassTester : NSObject {
}
@implementation MySubClassTester
- (void) one {
MySubClass *subclass = [[MySubClass alloc] init];
subclass.delegate = self;
}
@end
выдаст предупреждение: class 'MySubClassTester' does not implement the 'UITextViewDelegate' protocol
Я хочу, чтобы это вызвало предупреждение о том, что вместо этого не выполняется протокол 'MySubClassDelegate'.