嵌入式导航控制器

时间:2012-07-05 09:19:18

标签: ios xcode xcode4.2 xcode4.3 navigationcontroller

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

我想不出任何其他方式连接视图控制器请帮帮我 任何的思路。

1 个答案:

答案 0 :(得分:2)

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

  2. 假设您正在使用NIB(否则您只是使用故事板的embed命令),如果您想要添加一个与您的NIB一起使用的导航控制器,您可以相应地更改您的应用程序委托。

  3. 所以,你可能有一个应用程序委托,其中包含:

    //  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
    

    然后,在你的app delegate的实现文件中,你有一个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;
    }
    

    完成此操作后,您现在可以使用pushViewController从一个NIB视图控制器导航到另一个NIB视图控制器,并返回popViewControllerAnimated。在viewDidLoad中,您还可以使用self.title = @"My Title";命令控制视图导航栏中显示的内容。您可能还想更改NIB中的“顶栏”属性以包含导航栏模拟度量标准,以便您可以布置屏幕并很好地了解它的外观:

    enter image description here

    显然,如果您有一个非ARC项目,那些带有视图控制器的alloc / init的行也应该有一个autorelease(当您查看您的应用委托时这将是显而易见的)。