2009-07-18 50 views
2

我有一個名爲TripViewController的UIViewController子類。這個類有下面的方法:使用presentModalViewController添加視圖

- (void)lockScreen { 
    LockOverlay *lockOverlay = [[LockOverlay alloc] init]; 
    [self presentModalViewController: lockOverlay animated:YES]; 
} 

LockOverlay也是UIViewController子類,定義如下(該代碼的其餘部分僅僅是自動生成的存根):

// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 
    CGRect frame = CGRectMake(0, 0, 225, 37); 
    UIImageView *sliderBackground = [[UIImageView alloc] initWithFrame:frame];  
    sliderBackground.image = [UIImage imageNamed:@"slider-bar.png"]; 
    UIImageView *unlock = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"unlock.png"]]; 
    [sliderBackground addSubview:unlock]; 
    frame = CGRectMake(10, 360, 225, 37); 
    Slider *slider = [[Slider alloc] initWithFrame:frame]; 
    [slider addSubview:sliderBackground]; 
    slider.unlock = unlock; 
    [self.view addSubview:slider]; 
} 

當LOCKSCREEN被調用,該程序進入無限循環,並且loadView被反覆調用。

那麼,我在這裏做錯了什麼?我之前有過這樣的錯誤......在App Delegate中,我創建了一個TabBarController,其中一個視圖有一個NavigationController。當我嘗試將View而不是NavigationViewController添加到tabBar數組時,我得到了同樣的錯誤。我認爲這個問題是相似的,我並沒有把新的ViewController推到正確的位置,但這只是一個猜測。

回答

0

我改變loadView爲initWithFrame並返回自我。它現在有效。

0

[self.view addSubview:slider]; 

你應該有類似

self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

這是因爲self.view還不存在......那是什麼的loadView是!它被記錄在UIViewController文檔中,視圖屬性的實現是在訪問(vs分配)時,到目前爲止它是零,它調用loadView來首先創建視圖。你的loadView假設一個視圖存在,並試圖添加一個子視圖,該訪問導致視圖控制器再次調用loadView。

loadView的覆蓋應該始終將self.view分配給某些視圖即填充屏幕

相關問題