Я хочу создать подкласс 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.
Для дальнейшего ясновидения:
@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 не реализован.