2

我尝试使用协议,但它需要为每两个具有相同内容的类实现“makeMeDraggable”方法。我不希望在每两个类中实现并从共享类继承实现。我如何实现它?

代码:

//--(.h)--//

@interface SharedClass : UIView;
-(void) makeMeDraggable
@end

@interface DraggableUITextView: UITextView
@end

@interface DraggableUIImageView : UIImageView
@end

@implementaion SharedClass
-(void) makeMeDraggable {
  //some code
}
@end

@implementation DraggableUITextView
@end

@implementation DraggableUIImageView 
@end

//--(.m)--//

TextView *textView = [DraggableUITextView initWithFrame:CGRectMake(0,0,50,50)];
[textView makeMeDraggable];

ImageView *imageView = [DraggableUIImageView imageNamed:@"foo.png"];
[imageView makeMeDraggable];

我想避免以下:

@interface DraggableTextView: UITextView;
-(void) makeMeDraggable
@end

@interface DraggableUIImageView : UIImageView
-(void) makeMeDraggable
@end

@implementation DraggableUITextView
-(void) makeMeDraggable {
  //same code...
}
@end

@implementation DraggableUIImageView 
-(void) makeMeDraggable {
  //same code...
}
@end
4

3 回答 3

4

创建一个UIView类别并在那里编写函数而不是SharedView.Like:

@interface UIView (UIViewCategory)
-(void) makeMeDraggable;
@end


@implementaion UIView (UIViewCategory)
-(void) makeMeDraggable {
  //some code
}
@end

现在您可以对从类makeMeDraggable继承的每个对象使用方法。UIView

于 2013-06-09T12:38:01.047 回答
1

使用 makeMeDraggable 方法在 UIView 上创建一个类别,您将能够在 UITextView 和 UIImageView 对象上使用它。

于 2013-06-09T10:51:40.373 回答
1

做到这一点的方法是使用公共超类上的类别,在您的情况下,UIView.

Category 使用新方法扩展其类,然后可以像普通方法一样对所有子类使用这些方法。

于 2013-06-09T10:51:55.900 回答