我想在类A中定义一个方法。对于类A的任何i̶n̶s̶t̶a̶n̶c̶e̶子类,该方法应该是可写的。子类的实例将存储在NSArray中。我试图使用委托。但它没有用。我检查了一些在线发布的文章,例如How do I create delegates in Objective-C?和http://www.tutorialspoint.com/ios/ios_delegates.htm但是它们似乎不是我可以用来实现我的目标。任何熟悉这个的人都可以给我一个提示吗?
例如,
我为 UICollectionViewCell 创建一个名为 BaseClass 的基类,在BaseClass中有一个 ActionMethod 。单击不同的集合单元格将导致不同的操作。因此,我将为从 BaseClass 继承的每个单元格定义子类,以实现不同的操作。那么如何为每个子类覆盖ActionMethod?
答案 0 :(得分:0)
您的意思是覆盖,而非覆盖方法。在Objective-C中,除了在子类中使用完全相同的方法签名进行实现之外,您不必执行任何操作。
答案 1 :(得分:0)
通常,您定义一个基类,例如Shape,它具有一组对所有形状都通用的方法,例如getEnclosingRectangle,getShapeArea等。然后定义单独的形状子类,例如椭圆形,多边形,矩形和三角形。您甚至可以定义这些形状的子类,例如从椭圆形派生的圆。然后,您可以将所有椭圆,矩形和三角形(例如)存储在NSArray中,并为每个椭圆调用getArea方法。每个人都会在他们的班级中定义他们特定的getArea方法。
答案 2 :(得分:0)
代表可以在这里工作。另一种选择是使用回调块,例如
@interface Cell : NSObject
@property (nonatomic, copy) void(^onAction)();
- (void)actionMethod;
@end
@implementation Cell
- (void)actionMethod {
self.onAction();
}
@end
用作
Cell *cell1 = [[Cell alloc] init];
cell1.onAction = ^{
NSLog(@"Action 1");
};
Cell *cell2 = [[Cell alloc] init];
cell2.onAction = ^{
NSLog(@"Action 2");
};
如您所见,您不需要子类,您只需动态地将该代码添加到每个单元格。