我需要一些关于我的代码的帮助。我想创建一个自定义条形图。我做了所有的编码。当我在自定义类视图中创建对象时,它就像一个魅力。但是,我想让它变得通用。我想在ViewController中创建它。我还在storyboard中添加了一个视图,并将类名更改为我的自定义类名。
当我这样做时,它不起作用。
@implementation ViewController
-(void)viewDidLoad {
[super viewDidLoad];
GCBarGraphRow *first = [[GCBarGraphRow alloc]init];
first.backgroundColor = [UIColor redColor];
first.value = 20;
GCBarGraphRow *second = [[GCBarGraphRow alloc]init];
second.backgroundColor = [UIColor brownColor];
second.value = 40;
GCBarGraphColumn *container = [[GCBarGraphColumn alloc]init];
container.values = @[first,second];
NSLog(@"View Controller %@",container.values);
self.myGraph.array = container;
}
但是当我尝试在我的自定义视图类中创建它时,它可以工作。
@implementation GCBarGraphView
-(id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
barNumber = [array.values count];
//NSLog(@"%@",array.values);
showDifference = NO;
showShadow = NO;
gradientColor = NO;
drawBaseLine = YES;
[self baseClassInit];
}
return self;
}
-(void)baseClassInit {
GCBarGraphRow *first = [[GCBarGraphRow alloc]init];
first.backgroundColor = [UIColor redColor];
first.value = 20;
GCBarGraphRow *second = [[GCBarGraphRow alloc]init];
second.backgroundColor = [UIColor brownColor];
second.value = 40;
GCBarGraphColumn *container = [[GCBarGraphColumn alloc]init];
container.values = @[first,second];
}
答案 0 :(得分:1)
如果您要在故事板中创建视图并将其分配给CGBarGraphRow
,则还需要为视图控制器创建一个插座。
然后您不必从视图控制器代码手动初始化它。您的构造函数initWithCoder
将自动调用。
<强>更新强>
试试这个。在故事板中创建以下内容:
- 具有适当框架的UIView并将自定义类分配给CGBarGraphView
- 在该视图中再插入两个并将其类别分配给GCBarGraphRow
在CGBarGraphView
课程中创建两个出口并将其绑定到故事板中的正确视图:
@property (nonatomic, weak) IBOutlet GCBarGraphRow *row1;
@property (nonatomic, weak) IBOutlet GCBarGraphRow *row2;
删除视图控制器上面的代码 - 不需要它。在CGBarGraphView
代码中留下类似的内容:
-(id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
}
return self;
}
-(void)viewDidLoad {
GCBarGraphColumn *container = [[GCBarGraphColumn alloc]init];
container.values = @[self.row1,self.row2];
... whatever else you need to initialize
}