2009-06-06 9 views
3

私はHow to switch views by buttons on iPhone?の投稿を見ましたが、これはボタン付きのビューの間で前後に切り替える方法には答えません。質問をした人は、回答に応じて、ユビキタス・コントローラーでビューを切り替えることができました。ボタンとuinavigationコントローラではなくuiviewsの間で切り替える

プライマリビューでボタンが押されると、次のコードが実行されます。

  PhoneNumberViewController *phoneNumberViewController1 = [[PhoneNumberViewController alloc] initWithNibName:@"PhoneNumberView2" bundle:nil]; 
self.phoneNumberViewController = phoneNumberViewController1; 
[self.view removeFromSuperview]; 
[self.view insertSubview: phoneNumberViewController1.view atIndex:0]; 

このコードを実行すると、ビュー全体が空白になります。スーパービューのremove部分を省略すると、ビューはボタンの後ろに消えますが、ボタンはまだ残っています。私はこれがボタン間を切り替える正しい方法であるかどうかは分かりませんが、誰かがこれを行う方法を知っていれば助けてください。また、ボタンを使ってビューを切り替えるサンプルプロジェクトについて知っている人は、私に教えてください。

ありがとうございます!

答えて

2

ビューコントローラのビューをスーパービューから削除し、サブビューを追加しました。ビュー階層は、ビューコントローラのスーパービュー(おそらくあなたのウィンドウ)で壊れています。だからこそ空白の画面が表示されます。

ビューコントローラのビューを新しいビューに設定すると、元のビューの参照を保持したまま、新しいビューにスワップアウトすることができます。

// origView is an instance variable/IBOutlet to your original view. 
- (IBAction)switchToPhoneView:(id)sender { 
    if (origView == nil) 
    origView = self.view; 
    self.view = phoneViewController.view; 
} 

- (IBAction)switchToOriginalView:(id)sender { 
    self.view = origView; 
} 
+0

私はこのようなヘルパー関数を定義することから始めます。この投稿に基づいています:http://www.iphonedevsdk.com/forum/iphone-sdk-development/4052-have-someone-example-uibutton-switch-view-i-am-despair.html。私は間違いなくあなたの方法がよりきれいだと思います。 – Atma

1

私が通常使用する手法では、下部にツールバーを含むスーパービュークラスを作成し、残りの画面にはコンテンツビューUIViewクラスを作成します。

次に、コンテンツビューにサブビューを追加して、ボタンのクリックに基づいてビューを変更します。この方法では、同じビューのツールバーがすべてのビューで一定になるようになります。

-(void) clearContentView { 
    //helper to clear content view 
    for (UIView *view in [self.contentView subviews]){ 
     [view removeFromSuperview]; 
    } 
} 

マイIBActionは、その後、次のようになります:私は実際にappdelegateからこれを行なったし、すべてが働い

-(IBAction) buttonClicked{ 
    self.title = @"Images"; //change title of view 
    [self clearContentView]; //clear content view 
    [self.contentView addSubview:self.imagesViewController.view]; //add new view 
    [self.imagesViewController viewWillAppear:YES]; //make sure new view is updated 
    [self enableButtons]; //enable all other buttons on toolbar 
    self.imagesButton.enabled = NO; //disable currently selected button 
} 
関連する問題