1

ボタンなしでViewControllerをロードしたい。識別子を10に設定して使用してみました

if(...){ 
//load ViewController2
UIViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"10"];
[self.navigationController pushViewController:vc];
}

これが私のプロジェクトですhttp://www.sendspace.com/file/kfjhd5

何が問題なの?

4

1 に答える 1

10

あなたの質問の上記のコードは問題ありません。ボタンなしでこれを行う方法について質問されていたのは知っていますが、デモンストレーションの問題は、ボタンを使用したが、ボタンをに適切に接続しなかったことIBActionです。.hgoNextで次のように定義する必要があります。

- (IBAction)goNext:(id)sender;

そして、実装は次のようになります。

- (IBAction)goNext:(id)sender
{
    UIViewController *vc=[[self storyboard] instantiateViewControllerWithIdentifier:@"10"];
    [self.navigationController pushViewController:vc animated:YES];
}

IBAction手動で作成したと思います。将来的にcontrolは、ボタンからアシスタントエディタファイルに-ドラッグ(または右クリックドラッグ)すると、IBActionインターフェイスの作成を自動化でき、この種のエラーは発生しないことに注意してください。

IBActionの作成を自動化する


余談ですが、個人的には代わりにセグエを使用するのが好きなので、最初にビューコントローラー間のプッシュセグエを定義します。Xcode 6ではcontrol、シーンの上のViewControllerアイコンから宛先シーンにドラッグします。

seguexcode6を作成する

6より前のXcodeバージョンcontrolでは、シーンの下のバーにあるViewControllerアイコンから-ドラッグします。

セグエを作成する

次に、Interface Builderでセグエを選択し、それに「ストーリーボード識別子」を付けます(この例では、これを呼び出しましたpushTo10)。

セグエIDを指定

次にgoNext、手動で呼び出すのではなく、そのセグエを実行しpushViewControllerます。

- (IBAction)goNext:(id)sender
{
    [self performSegueWithIdentifier:@"pushTo10" sender:self];
}

その利点は、ストーリーボードがアプリのフローを視覚的に表現するようになり(シーンが浮かんでいるように見えるのではなく)、ナビゲーションバーなどのグラフィック要素がストーリーボードに正しく表現されることです。

この方法で行う必要はありませんが、注意する必要があるもう1つの方法です。

于 2012-09-19T17:37:02.453 に答える