2

我创建了一个基于视图的应用程序,并在 appdelegate .h 文件中创建了 UINavigationcontroller 对象并将其添加到窗口子视图中。应用程序中的下一步确实完成了启动,我已经分配并初始化了一个类,我希望在应用程序第一次启动时查看它,顶部有导航栏。

所以这是我将类添加到导航栏的代码

- (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:navController.view];
    //test is the class that i want to be viewed first when  the app launches first
    test *t = [[test alloc]initWithNibName:@"test" bundle:nil];
    [navController.view addSubview:t.view];
    [window makeKeyAndVisible];

    return YES;
}

但问题是我的测试类启动但它不显示导航栏。可能是什么问题?

4

4 回答 4

1

您不应将自己的视图控制器的视图添加为导航控制器的子视图。这样,您隐藏了导航控制器的视图(包括导航栏),这使导航控制器变得毫无意义,因为它不知道您的视图控制器想要成为其导航堆栈的一部分。

相反,使用以下命令将其推送到导航控制器的堆栈上:

[navController pushViewController:myViewController animated:NO];
于 2011-04-28T05:14:05.240 回答
1

使用一些这样的(添加这些行)

appDelegate.h

UINavigationController *navController

@property (nonatomic,retain) UINavigationController *navController;

在.m

test *t = [[test alloc]initWithNibName:@"test" bundle:nil]; 
self.navController=[[[UINavigationController alloc] initWithRootViewController:t] autorelease];

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

它可以帮助你。

从其他视图中,您需要创建 appDelegate 类的对象,然后访问该类的导航控制器

看到这个

yourAppDelegateClass *objAppDelegate=(yourAppDelegateClass *)[[UIApplication sharedApplication] delegate];

现在用于推送视图

SecondView *s=[[[SecondView alloc] initWithNibName:@"yournibName" bundle:nil] autorelease];
[objAppDelegate.navController pushViewController:s animated:YES];

这个概念可以帮助你。

于 2011-04-28T05:15:09.273 回答
0

导航栏不会出现,因为您正在将导航控制器的视图设置为测试视图。您可以通过将需要数组的导航控制器的视图控制器设置为 -

test *t = [[test alloc]initWithNibName:@"test" bundle:nil];
NSArray *viewControllers = [[NSArray alloc] initWithObjects:t,nil];
[self.navigationController setViewControllers:viewControllers];
于 2011-04-28T05:13:40.137 回答
0

首先,我看不到你在哪里分配初始化你的导航控制器。其次,您不会将 viewController 添加到导航控制器视图,而是将视图控制器推送到堆栈上,如下所示:

[navController pushViewController:t animated:NO];

希望这可以帮助。

于 2011-04-28T05:14:07.997 回答