私はこれで見つけることができるすべてのチュートリアルを見てきましたが、まだ答えがありません。コードから別のビューを呼び出す必要があります。 UIStoryboards
を使用しています。 UIButtons
からコントロールドラッグすることでビューを何度も変更しましたが、今ではコードからのものでなければなりません。ユーザーがアプリを初めて開いた場合、メインメニューから情報ページを呼び出そうとしています。ただし、コードからビューを変更する方法を見つけることはできません。私のすべてのビューは同じファイルによって制御されます(ViewController2)。メインメニューのidentifier
はViewControllerMainであり、情報ページのidentifier
はViewControllerInfoです。最初にこれを試しました:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
次に、それぞれに異なるUIViewControllers
を作成して、次のように言ってみました。
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
どちらも機能しませんでした。最初のものについては、それは言います:
宣言されていない識別子ViewControllerMainの使用。
2番目の例では、次のように述べています。
予期しないインターフェイス名「ViewController」:予想される識別子。
私に何ができる?
View Controllerを作成するには:
UIViewController * vc = [[UIViewController alloc] init];
View Controllerを呼び出すには(別のViewController内から呼び出す必要があります):
[self presentViewController:vc animated:YES completion:nil];
1つには、nullではなくnilを使用します。
ストーリーボードからView Controllerをロードする:
NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];
View ControllerのIdentifier
は、View Controllerのクラス名と同じか、ストーリーボードのIDインスペクターで割り当てることができるストーリーボードIDのいずれかです。
これにより、ストーリーボードからView Controllerが取得され、表示されます。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)
ストーリーボード名、View Controller名、View Controller IDを必要に応じて変更します。
ストーリーボードからView Controllerをインスタンス化してから表示する必要があります。
ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];
この例では、前のビューに戻るためにNavigation Controllerがあることを前提としています。もちろんpresentViewController:animated:completion:を使用することもできます。主なポイントは、ストーリーボードでターゲットView ControllerのIDを使用してターゲットView Controllerをインスタンス化することです。
NavigationControllerを使用する場合は、この方法でViewControllerを呼び出すことができます
1。現在の画面:新しい画面を読み込む
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
2.1ロード済みビュー:.hファイルに以下を追加
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
2.2ロード済みビュー:.mファイルに以下を追加
@implementation VerifyExpViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.delegate = self;
[self setNavigationBar];
}
-(void)setNavigationBar
{
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.translucent = YES;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}
-(void)onBackButtonTap:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
//todo for save button
}
@end
これが誰かに役立つことを願っています:)
これを行うには2つの方法があります。
1、ここでの私の答えで説明されているように、ストーリーボードでViewControllerにセグエを作成します: iOS 5のユーザー入力に関連しないセグエを実行する方法?
2、ViewControllerと識別子を与えて、私の答えのコードを使用して呼び出します: ストーリーボードのシーンをプログラムで(セグエを必要とせずに)呼び出しますか?
このis_の背後にある主要なロジック、
NSString * storyboardIdentifier = @"SecondStoryBoard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];
UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];
[self presentViewController:UIVC animated:YES completion:nil];
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
// [self presentViewController:controller animated:YES completion:nil];
UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController)
{
topRootViewController = topRootViewController.presentedViewController;
}
[topRootViewController presentViewController:controller animated:YES completion:nil];
表示するView Controllerクラスをインポートし、次のコードを使用します
KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];