2014-10-31 2 views
0

Мне нужна небольшая справка о моем коде. Я хочу создать пользовательскую гистограмму. Я все кодировал. Когда я создаю объекты в своем представлении пользовательского класса, он работает как шарм. Однако я хочу сделать его общим. Я хотел бы создать его в ViewController. Я также добавляю представление в раскадровку и меняю имя класса на свое собственное имя класса.Пользовательский класс, скомпилированный перед ViewController

Это не работает, когда я пытаюсь это сделать.

Но когда я пытаюсь создать его в своем классе пользовательского вида, он работает.

@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

Если вы создаете вид в раскадровке и присвоить это класс к вашему CGBarGraphRow, вам также необходимо создать выход к контроллеру вида.

Затем вам не нужно инициализировать его вручную из кода контроллера вида. Ваш конструктор initWithCoder будет вызываться автоматически.

Update:

Попробуйте это. В раскадровке создать следующее: - 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 
} 
+0

У меня есть GCBarGraphColum, который содержит NSArray и элементы массива GCBarGraphRow. Поэтому я должен использовать их в GCBarGraphView, однако, хотя я инициализирую их в ViewController, установив GCBarGraphView в раскадровку, мой пользовательский класс уже был запущен. Но я думаю, это потому, что имеет initwithCoder. Как я могу это исправить? –

+0

Создаете ли вы эти 3 GCBarGraphView в раскадровке или нет? – sha

+0

Нет, я этого не делал. Проблема состоит в том, что GCBarGraphView расширяет UIView и предполагает, что для построения графиков требуется GCBarGraphColumn, который содержит GCBarGraphRow. Однако он не инициализируется, потому что GCBarGraphView скомпилирован перед ViewController. –

Смежные вопросы