2012-05-23 3 views
0

Я уверен, что это очень глупая проблема. Я пытаюсь добавить UIImageView как subview в UIView. Код, который я пытаюсь для добавления подвид является:UViewiew subViews не отображается

for (int i = 0; i < kBoardSize; i++) { 
    for (int j = 0; j < kBoardSize; j++) { 

     Tile *t = [[Tile alloc] initWithPosition:CGPointMake(i, j) withSize:CGSizeMake(width, height)]; 

     [self insertSubview:t atIndex:0]; 
     //[self addSubview:t]; 
     //[self bringSubviewToFront:t]; 

     [temp addObject:t]; 
    } 
} 

Соответствующий Tile (который является UIImageView подкласс) код:

- (id) initWithPosition:(CGPoint)position withSize:(CGSize)size 
{ 
    self = [super initWithFrame:CGRectZero]; 
    [self setFrame:CGRectMake(position.x * size.width, position.y * size.width, size.width, size.height)]; 
    self.tag = position.x * kBoardSize + position.y; 
    [self setPiece:EMPTY]; 
    if (self) { 
     [self.layer setBorderColor:[[UIColor blackColor] CGColor]]; 
     [self.layer setBorderWidth:0.5]; 
    } 
    return self; 
} 

Теперь, когда я

NSLog(@"%@", [[self subViews] description]); 

2012-05-22 23:20:51.740 XXXXXXX[8204:f803] (
    "<Tile: 0x6a79380; baseClass = UIImageView; frame = (0 0; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x6a7ad70>>", 
    "<Tile: 0x6a94180; baseClass = UIImageView; frame = (0 106.667; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x6a93e40>>", 
    "<Tile: 0x6a97da0; baseClass = UIImageView; frame = (0 213.333; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 2; layer = <CALayer: 0x6a97de0>>", 
    "<Tile: 0x6a7aeb0; baseClass = UIImageView; frame = (106.667 0; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 3; layer = <CALayer: 0x6a7aef0>>", 
    "<Tile: 0x6a94610; baseClass = UIImageView; frame = (106.667 106.667; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 4; layer = <CALayer: 0x6a94650>>", 
    "<Tile: 0x6a946c0; baseClass = UIImageView; frame = (106.667 213.333; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 5; layer = <CALayer: 0x6a94700>>", 
    "<Tile: 0x6a94770; baseClass = UIImageView; frame = (213.333 0; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 6; layer = <CALayer: 0x6a947b0>>", 
    "<Tile: 0x6a94820; baseClass = UIImageView; frame = (213.333 106.667; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 7; layer = <CALayer: 0x6a94860>>", 
    "<Tile: 0x6a948d0; baseClass = UIImageView; frame = (213.333 213.333; 106.667 106.667); opaque = NO; userInteractionEnabled = NO; tag = 8; layer = <CALayer: 0x6a94910>>" 
) 

It показывает, что надстройки добавлены правильно. Но subviews фактически не отображаются в представлении. Что может быть проблемой?

+0

Вы добавили представление в иерархию? – borrrden

+0

Главный UIView? Да. Я добавил его через IB. –

+0

Я думаю, что нашел решение. После добавления его через IB я повторно инициализировал его в 'viewDidLoad' моего контроллера представления. И затем я вызывал функцию init моего UIView. После того, как я удалил код повторной инициализации 'self.gameView = [[TicTacToeView alloc] initWithFrame: CGRectMake (0, 0, 320, 320)],' теперь он работает нормально! Stil запутался, хотя почему повторная инициализация вызывает проблемы. –

ответ

1

Vashishtha Jogi, вы должны посмотреть на The Designated initializer и как это работает. Главное, что любой из методов initSomething вызывает назначенный инициализатор в конце концов, поэтому важно правильно его называть.

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