メインビューにボタンがあり、独立したxibファイルを使用して別のビューに移動する単純な単一のViewアプリケーションがあります。この2番目のビューには、メインビューに戻るためのボタンがあります。ナビゲーションコントローラーを使用していません。
この「戻る」ボタンをプログラムして、メインビューが再び表示されるようにする方法を教えてもらえますか?
よろしくお願いします。
メインビューにボタンがあり、独立したxibファイルを使用して別のビューに移動する単純な単一のViewアプリケーションがあります。この2番目のビューには、メインビューに戻るためのボタンがあります。ナビゲーションコントローラーを使用していません。
この「戻る」ボタンをプログラムして、メインビューが再び表示されるようにする方法を教えてもらえますか?
よろしくお願いします。
このように2番目のビューコントローラを呼び出した場合:
[self presentModalViewController:secondViewController animated:YES];
あなたはこのようにそれを却下することができます:
[self dismissModalViewControllerAnimated:YES];
デリゲートの使用を検討することをお勧めします。デリゲートを作成するのは少し手間がかかりますが、セカンダリView Controllerで変更または更新された内容に基づいて、最初のViewControllerに情報を送信できるはるかに柔軟なプラットフォームになります。これは、2番目のビューコントローラーをモーダルビューとして提示するというTommyGの回答よりも複雑ですが、同時により柔軟である可能性があります。次のような汎用プロトコルを作成する必要があります(私は肛門なので、別のobjcヘッダーファイルで作成することをお勧めします)。
//In YouPressMyButtons.h
#import <Foundation/Foundation.h>
@protocol YouPressMyButtons <NSObject>
- (void)secondViewBackButtonPressed:(id)sender;
@end
次に、最初のビューコントローラー(メインビュー)をプロトコルに準拠させ、次のように最初のビューコントローラー(メインビュー)のヘッダーファイルにsecondViewBackButtonPressed:メソッドを実装します。
//In FirstViewController.h
@interface FirstViewController : UIViewController <YouPressMyButtons>
- (void)secondViewBackButtonPressed:(id)sender;
@end
最初のViewController実装ファイルでは、実際にどこかにメソッドを作成し、次のように2番目のビューを閉じるように指示する必要があります。
//In FirstViewController.m somewhere down at the bottom
//(or on top if you prefer it that way;)
- (void)secondViewBackButtonPressed:(id)sender {
//Dismiss your second view controller in here
return;
}
次に、2番目のView Controllerで行う必要があるのは、デリゲートを作成し、ボタンが押されたときにこのメソッドを呼び出すことだけです。2番目のViewControllerヘッダーファイルでは、次のようなデリゲートを作成する必要があります。
//In SecondViewController.h
@interface SecondViewController : UIViewController {
__weak id <FCPViewSwap> delegate; //I am assuming you are using ARC like me :)
}
@property (weak, nonatomic) id<YouPressMyButtons> delegate;
- (IBAction)backButtonPressed:(id)sender;
@end
最後に、2番目のView Controller実装ファイルでは、delegateメソッドを呼び出すだけで、次のように上記で作成した最初のViewControllerメソッドに戻ります。
//Somewhere in SecondViewController.m
- (IBAction)backButtonPressed:(id)sender {
NSLog(@"Back button pressed. Forwarding to parent controller.");
[self.delegate secondViewBackButtonPressed:sender];
}
デリゲートを作成し、それらを使用してView Controller間で情報を送信することについての良い説明はあまり見たことがないので、ここでできる限り説明したいと思いました。これは、ViewController間で必要な情報を送信するための最も強力な方法の1つです。プロトコルで宣言されたメソッドを拡張して、必要な数の変数を渡すことができます。プロトコルにメソッドとプロパティを追加して、プロトコルをより便利にすることもできます。@requiredセクションと@optionalセクションに分けない限り、プロトコルにすべてのメソッドとプロパティを実装する必要があることに注意してください(プロトコルと@optional指定子の使用に関する適切な説明についてはAppleのドキュメントを参照してください)。プロトコルに関するAppleのドキュメント。これがお役に立てば幸いです。
ビューが2つしかない場合は、xcodeで「ユーティリティアプリ」テンプレートを使用することを検討してください