2011-07-19 70 views
2

我想在一個UIView中打包一些UIViews如UIButton,UIImageView。 當我嘗試顯示視圖,它沒有顯示在我的RootViewController的:顯示包含其他UIViews的UIView子類

這裏是我的UIView子類的代碼:

#import "Hover.h" 

@implementation Hover 


- (id)init{ 
    self = [super init]; 
    if (self) { 
     // Initialization code 
     UIImage *hover = [UIImage imageNamed:@"Hover.png"]; 
     UIImageView *imageView = [[UIImageView alloc] init]; 
     imageView.image = hover; 
     imageView.frame = CGRectMake(0, 0, hover.size.width, hover.size.height); 
     imageView.alpha = 0.75; 
     [self addSubview:imageView]; 
     [imageView release]; 
    } 
    return self; 
} 

這裏是RootViewController的類:

- (void)viewDidLoad 
{ 

    Hover *hover = [[Hover alloc] init]; 
    [self.navigationController.view addSubview:hover]; 
    [hover release]; 


    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

「懸停視圖」未顯示!但是,當我將一個UIImageView添加到我的RootViewController時,它可以工作!

+0

您還需要重寫'UIView'的指定初始化是'initWithFrame:方法',以確保您的觀點是正確的初始化。 – Andriy

回答

2

爲了顯示您的視圖,您應該覆蓋-(id)initWithFrame:(CGRect)frame;而不是編寫自定義初始值設定項。

嘗試這種方式:

-(id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if(self) { 
     // do init here... 
    } 
    return self; 
} 

另外,在-(void)viewDidLoad;方法中,首先發送[super viewDidLoad];,然後分配/初始化的圖。

+0

它的工作,只需要將[超級viewDidLoad]移動到頂部!謝謝 – Lowip

+0

看看'UIView'的文檔,關於初始化器......不客氣 – 2011-07-19 11:56:06

1
 - (void)viewDidLoad 
     { 
      [super viewDidLoad]; 

      Hover *hover = [[Hover alloc] init]; 

      [self.navigationController.visibleViewController.view addSubview:hover]; 

      [hover release]; 



       // Do any additional setup after loading the view, typically from a nib. 
     } 
+0

試試這個...... –

+0

好的複製/粘貼,請解釋一下嗎? – Mateo

+0

我們必須添加視圖到visibleviewcontroller的導航控制器的視圖,否則它不會apear –

0

只是一個快速猜測一眼:如果您使用導航控制器,您應該initWithRootViewController。您無法直接嚮導航控制器添加視圖,而是使用push。

HTH 馬庫斯