54

Xcode 4.6.1 を使用して Objective-C でコーディングしています。ストーリーボードでセグエを実行していて、アプリケーションを実行すると 2 番目のビュー コントローラーのナビゲーション バーが消えてしまうため、2 つのビュー コントローラー間でモーダル セグエを作成するときにナビゲーション バーを表示したままにする方法を知りたいです。そのバーに完了ボタンがありますが、表示されません。

4

11 に答える 11

89

Navigation ControllerモーダルView Controllerに別のものを追加するだけです。手順に従ってください

  1. を選択Modal View Controller
  2. に行くEditor menu
  3. 選択するEmbed In
  4. 選択するNavigation Controller

アプリケーションを実行します。これで完全に動作するはずです。

これで問題が解決することを願っています。

于 2013-06-20T05:21:56.623 に答える
64

モーダル セグエは画面全体を占有するため、表示側コントローラーにあるナビゲーション バー、ツールバー、またはタブ バーは隠されます。このモーダル コントローラーにナビゲーション バーが必要な場合は、専用のコントローラーを追加し、必要なボタンをその新しいナビゲーション バー (またはツールバー) に追加する必要があります。これをしたくない場合は、モーダルに提示せず、プッシュしてください。

于 2013-03-28T18:28:10.787 に答える
19

ナビゲーション バーを表示するには、次のようにします。

Objective-C

UINavigationController alloc]initWithRootViewController:modalVC];

スイフト3

let modelVC = self.storyboard?.instantiateViewController(withIdentifier: "modalVC") as! ModalVC
let navBarOnModal: UINavigationController = UINavigationController(rootViewController: modalVC)
self.present(navBarOnModal, animated: true, completion: nil)

これにより、モーダル ビュー コントローラーとナビゲーション バーが表示されます。Objective-C に関する知識は限られているため、プレゼンテーションの部分は書きませんでした。あなたはそれを理解できるはずです。;)

お役に立てれば!

于 2017-01-22T13:29:31.310 に答える
10

iOS 8 では、より良い方法があります。アダプティブ プレゼンテーション スタイルを使用できます。

  1. 「Present as popover」セグエを使用する
  2. UIPopoverPresentationControllerDelegate プロトコルを採用するようにコントローラーを設定します
  3. 2つの方法を実装する

目的 C:

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationFullScreen;
}

- (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: controller.presentedViewController];
    return navController;
}

迅速:

UIPopoverPresentationControllerDelegate
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.FullScreen
    }

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
    var navController = UINavigationController(rootViewController: controller.presentedViewController)
    return navController
}

スウィフト 4:

extension MyViewController: UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.fullScreen
    }

    func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
        return UINavigationController(rootViewController: controller.presentedViewController)
    }
}

セグエ メソッドの準備で、デリゲートを設定します。

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if let adpostVC = segue.destinationViewController as? XXXController {
            let popPC = adpostVC.popoverPresentationController
            popPC?.delegate = self
于 2014-12-06T13:26:12.517 に答える
4

There is an easier way to do this. Like previous comments said (but didn't explain all the steps) you need to embed your desired destination view controller in a navigation controller, then set your destination view controller to be the Navigation Controller, then the Navigation controller calls the destination view controller.

First, embed the VC in a NavVC. Then you must write the code to set the segue destination to be the Nav VC.

The code looks like this:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UINavigationController *nav = segue.destinationViewController;
    AddTriviaVC *triv = [[AddTriviaVC alloc]init];
    triv = nav.viewControllers[0]; 
    triv.location = self.location; 
} 

I hope this makes sense.

于 2014-07-16T03:06:34.950 に答える
3

UINavigationControllerこれはおそらく、モーダルに a がないためです。いずれかを使用し (または、ストーリーボードの ViewController にナビゲーション バーを追加するだけ)、それをモーダルに提示する必要があります。

于 2013-03-28T18:28:19.240 に答える
1

で次の操作を行うことにより、プログラムでツールバーを追加できます。-(void)viewDidLoad

NSInteger tbHeight = 50;
tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - tbHeight), self.view.frame.size.width, tbHeight)];
tb.translucent = YES;
emailButton = [[UIBarButtonItem alloc] initWithTitle:@"Email Results" style:UIBarButtonItemStyleBordered target:tvController action:@selector(actionSheet:)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneButtonPressed:)];

NSArray *barButton  =   [[NSArray alloc] initWithObjects:emailButton,flexibleSpace,doneButton,nil];
[tb setItems:barButton];


[self.view addSubview:tb];

barButton = nil;

次に、完了ボタンを押すための IBAction を作成する必要があります。これは次のように行われます。

-(IBAction)doneButtonPressed:(id)sender {
    [self dismissModalViewControllerAnimated:YES];
}

これにより、モーダルビューコントローラーで必要なものが得られるはずです。

于 2013-03-28T18:33:23.570 に答える