72

このチュートリアルで見つけることができるすべてのチュートリアルを見てきましたが、まだ答えがありません。コードから別のビューを呼び出す必要があります。を使用してUIStoryboardsいます。からコントロールをドラッグしてビューを何度も変更しましたUIButtonsが、今ではコードから変更する必要があります。ユーザーがアプリを初めて開いた場合、メイン メニューから情報ページを呼び出そうとしています。ただし、コードからビューを変更する方法が見つからないようです。すべてのビューは同じファイル ( ViewController2 ) によって制御されます。私のidentifierメインメニューはViewControllerMainidentifier、情報ページはViewControllerInfoです。最初にこれを試しました:

[ViewControllerMain presentViewController: ViewControllerInfo 
                                 animated:YES 
                               completion: NULL];

次にUIViewControllers、それぞれに異なるものを作成して、次のように言ってみました。

[ViewController2 presentViewController: ViewController 
                              animated:YES 
                            completion: NULL];

どちらも機能しませんでした。最初のものについては、次のように述べています。

宣言されていない識別子 ViewControllerMain の使用。

2番目のものでは、次のように述べています。

予期しないインターフェイス名 'ViewController': 予期される識別子。

私に何ができる?

4

8 に答える 8

21

ストーリーボードからビュー コントローラーをインスタンス化して表示する必要があります。

ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];

この例では、前のビューに戻るためのナビゲーション コントローラーがあることを前提としています。もちろん、presentViewController:animated:completion: も使用できます。主なポイントは、ターゲット ビュー コントローラーの ID を使用して、ストーリーボードにターゲット ビュー コントローラーをインスタンス化させることです。

于 2013-04-21T21:00:32.707 に答える
20

迅速

これにより、ストーリーボードからビュー コントローラーが取得され、表示されます。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

ストーリーボード名、ビュー コントローラー名、およびビュー コントローラー ID を適切に変更します。

于 2016-06-10T04:44:34.113 に答える
5

この方法でViewControllerを呼び出すことができます.NavigationControllerを使用したい場合

ここに画像の説明を入力

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

これが誰かに役立つことを願っています:)

于 2015-03-21T12:18:41.597 に答える
3

これを行うには 2 つの方法があります。

1、ここでの私の回答で説明されているように、ストーリーボードで ViewController へのセグエを作成します: How to perform a segue that is not related to user input in iOS 5?

2、ViewController と識別子を指定し、ここでの私の回答のコードを使用して呼び出します: Call storyboard scene programmatically (without need segue)?

于 2013-04-21T21:16:44.357 に答える