2012-05-23 109 views
0

我相信這是一個非常愚蠢的問題。我正在嘗試將UIImageView作爲子視圖添加到UIView。我試圖添加子視圖的代碼是:UIView子視圖不顯示

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]; 
    } 
} 

相應的瓷磚(這是一個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>>" 
) 

它顯示子視圖已正確添加。但子視圖並不實際顯示在視圖中。什麼可能是這個問題?

+0

您是否將視圖本身添加到層次結構中? – borrrden

+0

主要UIView?是。我通過IB添加了它。 –

+0

我想我已經找到了解決方案。通過IB添加後,我在視圖控制器的'viewDidLoad'中重新初始化它。然後我調用了我的UIView的init函數。在我刪除了重新初始化代碼'self.gameView = [[TicTacToeView alloc] initWithFrame:CGRectMake(0,0,320,320)];'它現在工作正常! Stil困惑,雖然爲什麼重新初始化導致問題。 –

回答

1

Vashishtha Jogi,你應該看看The Designated initializer,它是如何工作的。重點是任何initSomething方法最終都會調用指定的初始化方法,所以正確調用它是很重要的。