web-dev-qa-db-ja.com

iOS:View Controllerをプログラムで提示する

presentViewController:animated:completion:メソッドを使用して、別のView Controllerにアクセスしています。

これは私のコードです:

AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];

このコードは他のUIViewControllerに送られますが、他のコントローラーは空です。私はいつも絵コンテを使ってきましたが、今ではコードでこれを行う必要があります。

33
Salieh

ストーリーボードを使用している場合、おそらくallocinitを使用して新しいView Controllerを作成するべきではありません。代わりに、ストーリーボードを見て、実行したいセグエを見つけてください。一意の識別子を持つ必要があります(そうでない場合は、右側のサイドバーで設定できます)。

そのセグエの識別子を見つけたら、current View Controllerに-performSegueWithIdentifier:senderメッセージを送信します。

[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];

これにより、ストーリーボードがAddTaskViewControllerをインスタンス化し、そのセグエに対して定義した方法で表示します。


一方、ストーリーボードをまったく使用していない場合は、AddTaskViewControllerに何らかのユーザーインターフェイスを提供する必要があります。最も一般的な方法は、nibを使用してコントローラーを初期化することです。initを呼び出す代わりに、-initWithNibName:bundle:を呼び出し、add-を含む.xibファイルの名前を指定します。タスクUI:

AddTaskViewController *add = [[AddTaskViewController alloc]
                              initWithNibName:@"AddTaskView" bundle:nil];
[self presentViewController:add animated:YES completion:nil];

(新しいView Controllerに関連付けられたビューを取得する他の(あまり一般的ではない)方法がありますが、これはおそらく、作業するのに最も手間がかからないでしょう。)

47
Tim

ストーリーボードを使用していて、「add」viewControllerがストーリーボードにある場合、設定で「add」viewcontrollerの識別子を設定すると、次のようなことができます。

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"NameOfYourStoryBoard" 
                                                     bundle:nil];
AddTaskViewController *add = 
           [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];

[self presentViewController:add 
                   animated:YES 
                 completion:nil];

ストーリーボードまたはnibファイルに「追加」viewControllerがなく、プログラム全体を作成したい場合、appDocsは次のように言います。

ストーリーボードまたはnibファイルでビューを定義できない場合、loadViewメソッドをオーバーライドして、ビュー階層を手動でインスタンス化し、ビュープロパティに割り当てます。

31
Leg1oneR

ストーリーボードIDインスペクターからストーリーボードIDを設定する必要があります

 AddTaskViewController *add=[self.storyboard instantiateViewControllerWithIdentifier:@"storyboard_id"];
 [self presentViewController:add animated:YES completion:nil];
2
Rajesh Gupta

あなたのコード:

 AddTaskViewController *add = [[AddTaskViewController alloc] init];
 [self presentViewController:add animated:YES completion:nil];

このコードは他のコントローラーに行くことができますが、ストーリーボードのコントローラーではなく、新しいviewControllerを取得します。次のようにします。

AddTaskViewController *add = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
[self presentViewController:add animated:YES completion:nil];
1
klone

最善の方法は

AddTaskViewController * add = [self.storyboard instantiateViewControllerWithIdentifier:@"addID"];
[self presentViewController:add animated:YES completion:nil];
1
Sahidul Islam

このコードを試してください:

[self.navigationController presentViewController:controller animated:YES completion:nil];

以下を試してください:

NextViewController *nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:NULL];
0
MNIDR

Swiftでこれを行う方法は次のとおりです。

let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)
0
Esqarrouth