如何在视图上显示UINavigationController

时间:2011-05-30 10:07:16

标签: iphone objective-c ios4

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.

    [window addSubview:viewController.view];
    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil];
    UINavigationController *nav_obj = [[UINavigationController alloc] initWithRootViewController:overviewViewController ];

    [self.viewController presentModalViewController:nav_obj  animated:YES];
    [overviewViewController release];
    [self.window makeKeyAndVisible];

    return YES;
}

此代码显示导航控制器的蓝色条,但没有按钮。它似乎是UINavigationController分配为空。 谁知道问题是什么?

UPD:归档http://www.mediafire.com/?lbjjvl6fcue2q18 请帮助我,我是objective-c

的新手

3 个答案:

答案 0 :(得分:2)

您需要为其创建按钮,例如:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:launcherView action:@selector(endEditing)];
self.navigationItem.leftBarButtonItem = doneButton;
[doneButton release];

答案 1 :(得分:1)

使用UINavigationController的正确方法是push查看控制器。这样它们将被堆叠,并且当它是大小写时(即,当你实际上可以回到之前的控制器时)导航栏将用后退按钮填充。您可以通过定义您推送的控制器的title来控制“后退”按钮中显示的标签。

另一个答案中显示的技巧(明确设置按钮)对于定义按钮很有用,如果你需要的话。

您可以尝试使用此代码:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil];
    UINavigationController* navigation = [[UINavigationController alloc] init];
    [navigation pushViewController:overviewViewController animated:NO];
    [overviewViewController release];

    [window addSubview:[navigation view]];
    [self.window makeKeyAndVisible];

    return YES;
}

而不是:

    UINavigationController* navigation = [[UINavigationController alloc] init];
    [navigation pushViewController:overviewViewController animated:NO];

您也可以使用initWithRootController,但要显示推送视图控制器的一般情况,我更喜欢这个。

请注意,由于您只是推动根控制器,所以此时您应该看不到后退按钮,但是如果您按下第二个视图控制器,它将会出现。

编辑:我看了你的项目。你应该尝试和做的总结:

  1. 您在NIB中需要的对象:文件所有者(UIApplication),第一响应者,FBFun应用代理(iVkAppDelegate),窗口(UIWindow);删除其余部分;

  2. 文件的所有者代理出口是FBFun App Delegate;

  3. FBFun App Delegate窗口是Window。

  4. 通过这种简单的设置(或多或少的设置),请使用以下代码:

     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
         UINavigationController* navigation = [[UINavigationController alloc] init];
    
         //--    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil];
         iVkViewController *overviewViewController = [[iVkViewController alloc] init];
     overviewViewController.title = @"First";
         [navigation pushViewController:overviewViewController animated:NO];
    
         iVkViewController *overviewViewController2 = [[iVkViewController alloc] init];
     overviewViewController2.title = @"Second";
         [navigation pushViewController:overviewViewController2 animated:NO];
    
        [overviewViewController release];
        [window addSubview:[navigation view]];
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    

    在上面的代码中,正如您所注意到的那样,我将iVkViewController实例化了两次,只是为了让第二个控制器进入导航器。

    请从模拟器中删除您现有的应用程序,并运行此应用程序以查看导航栏是否已正确创建,您可以从第二个控制器返回到第一个控制器。

    我删除了MainPageDialog的用法,因为MainPage nib有很多问题。

    但我希望这个骨架足以让你继续发展。

答案 2 :(得分:0)

由于您没有向窗口添加视图,因此错过了该行。在您的代码中添加此行

[window addSubview:nav_obj.view];