0

我刚刚将我的 Xcode 从 4.2 更新到 4.3.3,我一直遇到一个问题,即是否可以在单个视图应用程序中添加导航控制器,因为当我尝试将导航控制器嵌入到控制器中时没有任何反应。我想通过一个按钮将两个视图控制器连接到第二个控制器,并将导航栏连接到第一个视图控制器。

我想不出任何其他方式来连接视图控制器请帮助我任何想法。

4

1 回答 1

2
  1. 如果您不想添加导航控制器,您可以在现有视图控制器之间转换,使用presentViewController从第一个到第二个,然后dismissViewControllerAnimated返回。

  2. 假设您使用的是 NIB(否则您只需对故事板使用 embed 命令),如果您想添加与您的 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 视图控制器导航到另一个的 usingpushViewController并返回popViewControllerAnimated. 您viewDidLoad还可以使用该self.title = @"My Title";命令来控制视图导航栏中显示的内容。您可能还想更改 NIB 中的“顶部栏”属性以包含导航栏模拟指标,以便您可以布局屏幕并很好地了解它的外观:

在此处输入图像描述

显然,如果您有一个非 ARC 项目,那么那些带有视图控制器的 alloc/init 的行也应该有一个autorelease.

于 2012-07-05T13:41:28.447 回答