2009-07-18 11 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]; 
} 

、プログラムは無限ループに入り、loadViewは繰り返し呼び出されます。

ここで私は何を間違えていますか?私はこれまでのようなバグを抱えていました... App Delegateでは、TabBarControllerを作成し、ビューの1つにNavigationControllerがあります。 NavigationViewControllerの代わりにViewをtabBar配列に追加しようとしたときに、同じ種類のバグがありました。私はこの問題が似ていると仮定し、私は新しいViewControllerを適切な場所に押し込んでいませんが、それは単なる推測です。

答えて

0

loadViewをinitWithFrameに変更し、selfを返しました。それは今働く。

0

[self.view addSubview:slider]; 

前に

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

のようなものを持っている必要がありself.viewが存在していない、まだ...それはloadViewメソッドが何のためにあるのかだからこれは! UIViewControllerドキュメントでは、ビュープロパティの実装は、アクセスされたとき(vs割り当て済み)、これまではnilであった場合、最初にビューを作成するためにloadViewを呼び出します。あなたのloadViewは、ビューが存在していると仮定し、サブビューを追加しようとしました。そのアクセスによって、View Controllerは再びloadViewを呼び出すことになりました。

loadViewのオーバーライドでは、self.viewには何らかのビューが表示されます。

関連する問題