15

ストーリーボードに新しいナビゲーションコントローラーを作成し(プログラムではありません!)、通常のUIViewControllerの「ルートビューコントローラー」に設定し、次のビューコントローラーに進むボタンを追加しました(この2番目のビューコントローラーは私が欲しいビューコントローラーには、最初のビューコントローラーにリンクするための戻るボタンがあります)。これで、ボタンを次のビューコントローラにリンクしようとすると、「ナビゲーションコントローラのプッシュはサポートされていません」。

助けてください、そして感謝します

編集:クラスのUIViewControllerではなく、誤ってUINavigationControllerをサブクラス化しました。ともあれ、ありがとう。

4

4 に答える 4

10

私はこれを試しましたが、問題はありません。すべてIBで行われ、追加のコードは必要ありません...

  1. ストーリーボードを使用して、新しいプロジェクト「シングルビューアプリケーション」を開始します
  2. ストーリーボードを選択し、作成されたビューを削除します。
  3. 新しいナビゲーションコントローラーをドラッグします(テーブルビューが表示されます)
  4. テーブルとテーブルビューコントローラーを削除すると、ナビゲーションコントローラーが残ります。
  5. 通常のViewControllerをドラッグします
  6. 右クリックしてナビゲーションコントローラから新しいビューにドラッグし、[リレーションシップ-ルートビューコントローラ]を選択します
  7. 「バーボタンアイテム」をナビゲーションバーにドラッグします。ナビゲーションバーはViewControllerの上部に表示されます。必要に応じて、この名前をForwardに変更できます。
  8. 次に、「進む」ボタンを押して表示する別のビューコントローラをドラッグします。
  9. 右クリックしてバーボタンから2番目のViewControllerにドラッグし、[プッシュ]を選択します

プロジェクトを実行すると、ナビゲーションバーとボタンを含む単一のビューが表示されます。ボタンをクリックすると、もう一方のビューが押され、[戻る]ボタンが表示されて最初のビューコントローラーに戻ります。役に立ったら、ストーリーボードの写真を投稿してみます。

PushViewControllers

プラズマ

于 2012-05-30T15:07:58.957 に答える
1

私も同じ問題を抱えていました。それぞれが独立して実行され、個別にデバッグされ、ナビゲーションバーで見た目が正しくなるように、各ストーリーボードにナビゲーションコントローラーを配置したかったのです。

他のアプローチを使用すると、UINavigationControllerが元のストーリーボードから保持されることがわかりました-私は望んでいませんでした-またはエラーが発生します。

ビューコントローラでAppDelegateを使用してrootViewControllerを設定すると、うまくいきました(Segueから別のストーリーボードにSegueの命名規則を借用しますか?):

- (void)showStartupNavigationController {
NSLog(@"-- Loading storyboard --");

//Get the storyboard from the main bundle.
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil];
//The navigation controller, not the view controller, is marked as the initial scene.
UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController];

NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController);

//Remove the current navigation controller.
[self.navigationController.view removeFromSuperview];
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
window.rootViewController = theInitialViewController;
于 2014-04-16T07:40:02.493 に答える
0

プログラムでビューを交換するには、セグエを選択して「PushView」のような識別子を付け、次のように呼び出す必要があります...。

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

これは、プログラムで進むボタンをクリックするのと同じことを行います。上記のコードを使用してサンプルプロジェクトを作成しました。プログラムでビューを変更するために使用できるコードを含む-(IBAction)があります。

PushView.zip

于 2012-05-30T21:12:11.493 に答える
0

また、これを実行したかったので、ユーザーがボタンを押したときに画面(ナビゲーションコントローラーが埋め込まれている)を表示します。

最初の試みで、最初の画面のボタンからナビゲーションコントローラーにセグエを接続しましたが、「ナビゲーションコントローラーのプッシュはサポートされていません」というエラーでアプリがクラッシュしていました。

これは私が見つけた解決策です:

最初の画面のボタンからナビゲーションコントローラーへのセグエを選択します。識別子がある場合は、その名前をコピーします。次に、そのセグエを削除します。

次に、Ctrlキーを押しながら最初のView Controllerのボタンをクリックし、表示したいVIEW CONTROLLER(それを指しているNavigation Controllerではなく)にドラッグして新しいセグエを作成し、小さなポップアップウィンドウで[Push]を選択します。

次に、セグエの中央にあるアイコンをクリックし、最初のステップでコピーした名前をその識別子として貼り付けます。

IBは、「エントリポイントがないためにシーンに到達できず、-instantiateViewControllerWithIdentifier:を介したランタイムアクセス用の識別子がありません」という警告を表示します。心配しないでください、それは完璧に動作します。

戻るボタンとして表示される文字列をカスタマイズする場合は、ボタンを押した後に表示されるビューコントローラー(子ビューコントローラー)のviewDidLoadメソッドにこの行を追加できます
(「設定」を必要な名前に置き換えてください)

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.topItem.title = @"Settings";
    ...

}
于 2016-04-19T13:48:19.117 に答える