有没有办法只允许UIViewControllers遵守协议?

时间:2012-11-22 23:11:14

标签: objective-c ios uiviewcontroller objective-c-protocol

有没有办法做这样的事情(下面不起作用):

@protocol ElementPicker <UIViewController>

- (id)initWithFile:(NSFileWrapper *)file andInfo:(NSString *)info;

@property (nonatomic, weak) NSObject<ElementPickerDelegate> *delegate;
@end

因此,实现“ElementPicker”的对象必须继承自UIViewController

2 个答案:

答案 0 :(得分:5)

没有。协议只能扩展其他协议。您可以做的最接近的是将变量,属性或参数定义为UIViewController,它也符合ElementPicker协议。像这样:

- (void)someMethod:(UIViewController<ElementPicker> *)controller {
}

附注 - 通常将代理定义为id,而不是NSObject。如:

@property (nonatomic, weak) id<ElementPickerDelegate> delegate;

答案 1 :(得分:1)

我不认为协议可以要求它是UIViewController,但您可以通过设置要求委托为UIViewController来轻松实现此目的:

@property (nonatomic, weak) UIViewController<ElementPickerDelegate> *delegate;