有人可以共享一个目标c UIView装饰器模式示例。您可以参考下面的结构。
带背景的父视图
- >背景为儿童的顶栏视图
- >内容视图,背景为儿童
我试图创建类似于Pro Objective C Design Patterns装饰专家的例子。我想使用UIView而不是UIImage视图,这个例子很复杂。如果装饰师不适用,请告诉我。
我尝试自己做,但顶部栏似乎会覆盖父视图。
答案 0 :(得分:4)
我必须解决这个问题。
首先,我创建了一个协议所在的头文件。
@interface Window : NSObject
@end
@protocol Window <NSObject>
@optional
-(void)draw;
-(NSString*)getDescription;
-(UIView*)addView;
@end
创建了一个具体的窗口:
@implementation SimpleWindow
-(void)draw{
}
-(NSString*)getDescription{
return @"simple window";
}
-(UIView*)addView{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 450)];
[view setBackgroundColor:[UIColor orangeColor]];
return view;
}
创建装饰/视图功能/插件:
@implementation VerticalScrollBarDecorator
- (instancetype)initWithDecoratedWindow:(id<Window>)win
{
self = [super init];
if (self) {
decoratedWindow = win;
}
return self;
}
-(void)draw{
}
-(void)drawVerticalScrollBar{
}
-(NSString *)getDescription{
return [NSString stringWithFormat:@"%@, %@",[super getDescription], @"including vertical scrollbars" ];
}
-(UIView*)addView{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 450)];
[view setBackgroundColor:[UIColor greenColor]];
UIView *superView = [super addView];
[superView addSubview:view];
return superView;
}
在viewDidLoad中实现它,例如:
- (void)viewDidLoad
{
[super viewDidLoad];
id<Window> decoratedWindow = [[VerticalScrollBarDecorator alloc] initWithWindow:[[SimpleWindow alloc] init]];
decoratedWindow = [[HorizontalScrollBarDecorator alloc] initWithWindow:decoratedWindow];
NSLog(@"%@", [decoratedWindow getDescription]);
[self.view addSubview:[decoratedWindow addView]];
}
这将导致主视图将一些视图添加为子视图。有很多方法可以实现相同的结果,但我想在Objective C上遵循相同的模式,因为我也用Java编写了Android。顺便说一句,这是基于维基百科中的Java示例。