Iphone 自定义导航控制器iOS 6出现问题

Iphone 自定义导航控制器iOS 6出现问题,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,我已在appDelegate中创建了自定义导航控制器: self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; poemsView = [[[PoemsViewController alloc]initWithNibName:@"PoemsViewController" bundle:nil] autorelease]; self.navigationContro

我已在appDelegate中创建了自定义导航控制器:

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

poemsView  = [[[PoemsViewController alloc]initWithNibName:@"PoemsViewController" bundle:nil] autorelease];
self.navigationController = [[[UINavigationController alloc] initWithRootViewController:poemsView] autorelease];
self.navigationController.navigationBarHidden = YES;


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

[self.window makeKeyAndVisible];

所以问题是我需要从viewController获取应用午餐,但如果我将viewController设置为rootviewController,则导航控制器不会推送导航,反之亦然,如果将导航控制器设置为root,应用程序不会从菜单或主视图控制器加载。

为什么要将Poemsview创建为导航控制器的rootviewcontroller

如果要先加载ViewController,请使用以下代码

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

poemsView  = [[[PoemsViewController alloc]initWithNibName:@"PoemsViewController" bundle:nil] autorelease];

self.navigationController = [[[UINavigationController alloc] initWithRootViewController:self.viewController] autorelease];

self.navigationController.navigationBarHidden = YES;



self.window.rootViewController = self.navigationController;

[self.window makeKeyAndVisible];
您可以创建另一个导航控制器作为Viewcontroller的
子类。

在您的按钮操作中添加以下内容:

// Create a regular view controller.
PoemViewController *modalViewController = [[[PoemViewController alloc] initWithNibName:@"PoemViewController" bundle:nil] autorelease];

// Create a navigation controller containing the view controller.
UINavigationController *secondNavigationController = [[UINavigationController alloc] initWithRootViewController:modalViewController];

// Present the navigation controller as a modal view controller on top of an existing navigation controller
[self presentModalViewController:secondNavigationController animated:YES];

现在,您可以从您的
表视图DidselectRowAtindexpath

推送至详细视图,您如何自定义导航栏?典型的解决方案包括使用
外观
自定义标准导航控制器的外观,在
UINavigationBar
上放置一个类别并替换其
drawRect
。你能解释一下你在定制中想做什么吗?您通常不想将
UINavigationController
子类化(这不是您所做的),但我不清楚您想做什么。根据您试图达到的效果,建议会有所不同。ViewController的用途是什么?如果您将其用于一些临时用途,如登录或启动屏幕,我会从PoemsViewController以模式显示它。我知道,但导航控制器不会推入detailViewController,例如,因为它的根未定义!您是否在此处检查了我的代码
self.viewcontroller
rootviewcontroller
。他是对的,您的rootviewcontroller是导航控制器,它在堆栈底部有self.viewcontroller。应该可以使用,请尝试。谢谢,但您的代码不会将poemsViewController推到详细视图控制器,正如我所说:)ViewController是我的主视图,其中有菜单,然后用户点击Poems按钮,通过模式转换样式显示PoesmViewController。然后我在那里有一个表视图,用户触摸每个单元格,然后它应该推送到detailViewController PoemsViewContrller继承自UIViewController类而不是UINAvigationController,所以我定义了一个自定义导航控制器