0

Xcode を 4.2 から 4.3.3 に更新したところ、単一のビュー アプリケーションにナビゲーション コントローラーを追加できないという問題が発生し続けています。コントローラーにナビゲーション コントローラーを埋め込もうとしても何も起こらないからです。2 つのビュー コントローラーをボタンで 2 番目のコントローラーに接続し、ナビゲーション バーを最初のビュー コントローラーに接続したいと考えています。

ビューコントローラーを接続する他の方法は考えられません。アイデアを手伝ってください。

4

1 に答える 1

2
  1. ナビゲーション コントローラーを追加したくない場合はpresentViewController、最初のビュー コントローラーから 2 番目のビュー コントローラーに移動しdismissViewControllerAnimatedて戻ることで、既存のビュー コントローラー間を移行できます。

  2. NIB を使用していると仮定すると (それ以外の場合は、ストーリーボードに埋め込みコマンドを使用するだけです)、NIB にとどまるナビゲーション コントローラーを追加する場合は、それに応じてアプリ デリゲートを変更できます。

したがって、次のようなアプリ デリゲートがある可能性があります。

//  AppDelegate.h

#import <UIKit/UIKit.h>

@class YourViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) YourViewController *viewController;

@end

これを変更して、ナビゲーション コントローラーを追加します (ここでメイン ビュー コントローラーへの以前の参照を取り除くことができます)。

//  AppDelegate.h

#import <UIKit/UIKit.h>

//@class YourViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

//@property (strong, nonatomic) YourViewController *viewController;
@property (strong, nonatomic) UINavigationController *navigationController;

@end

そして、アプリ デリゲートの実装ファイルには、didFinishLaunchingWithOptionsおそらく次のような記述があります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    self.viewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];
    return YES;
}

これを次のように変更できます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    //self.viewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
    //self.window.rootViewController = self.viewController;

    YourViewController *viewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = self.navigationController;

    [self.window makeKeyAndVisible];
    return YES;
}

これで、ある NIB ビュー コントローラーから別の NIB ビュー コントローラーに移動してpushViewController、 で戻ることができるようになりましたpopViewControllerAnimatedviewDidLoadコマンドを使用self.title = @"My Title";して、ビューのナビゲーション バーに表示される内容を制御することもできます。また、NIB の「トップ バー」プロパティを変更して、シミュレートされたナビゲーション バーのメトリックを含めることもできます。これにより、画面をレイアウトして、画面がどのように見えるかを把握できます。

ここに画像の説明を入力

明らかに、ARC 以外のプロジェクトがある場合は、View Controller の alloc/init を含む行にも が必要autoreleaseです (これは、アプリ デリゲートを見ると明らかです)。

于 2012-07-05T13:41:28.447 に答える