我知道在Java中可以有一个不包含公共接口的类。相反,开发人员将任何公共属性和方法放在由另一个类实现的Interface类中。所以我的问题是:
是否可以使用具有暴露不同方法的接口类的UIViewController?在Objective C中,接口类是一个协议,不是吗?有没有办法强制协议成为UIViewController的接口?我的意思是这样的:
UIViewController contains methods:
- (void)methodA
- (void)methodB
- (void)methodC
- (void)methodD
- (void)methodE
Protocol A contains methods:
- (void)methodA
- (void)methodB
Protocol B contains methods:
- (void)methodC
- (void)methodD
- (void)methodE
Protocol C contains methods:
- (void)methodA
- (void)methodB
- (void)methodE
我想使用相同的UIViewController,但我希望它根据使用它的应用程序公开不同的方法和属性。
答案 0 :(得分:1)
是的,这正是协议/代理所使用的内容。在viewcontroller上实现协议,然后在将调用这些方法的类上设置datasource / delegates。例如:
@protocol delegateA <NSObject>
- (void)methodA
- (void)methodB
@end
@interface MyViewController : UIViewController <delegateA>
//Implement protocol methods here
@end
@interface MyClass : NSObject
@property (nonatomic, weak) id<delegateA> delegate;
@end
现在在MyClass
类中,您可以在将视图控制器设置为新类委托并调用它之后调用viewcontroller上的方法
[self.delegate methodA]
但是你只能调用delegateA
中声明的方法,而不是视图控制器类的整个接口。