在ViewController之前编译的自定义类

时间:2014-10-31 19:51:57

标签: ios objective-c class storyboard

我需要一些关于我的代码的帮助。我想创建一个自定义条形图。我做了所有的编码。当我在自定义类视图中创建对象时,它就像一个魅力。但是,我想让它变得通用。我想在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];
}

1 个答案:

答案 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
}