【问题标题】:Issue with custom navigation controller iOS 6自定义导航控制器 iOS 6 的问题
【发布时间】:2012-12-16 18:13:19
【问题描述】:

我在 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,我的导航控制器不会推送导航,反之亦然,如果将我的导航控制器设置为根,应用程序不会从菜单加载或主视图控制器。

【问题讨论】:

  • 如何自定义导航栏?典型的解决方案包括使用appearance 自定义标准导航控制器的外观,到在UINavigationBar 上放置一个类别并替换它的drawRect。你能解释一下你在定制中想要做什么吗?您通常不想继承 UINavigationController (不是那是您所做的),但我不清楚您要做什么。建议会因您要达到的效果而异。
  • ViewController 的作用是什么?如果你将它用于临时的东西,比如登录或启动屏幕,我会从 PoemsViewController 模态地展示它。

标签: iphone objective-c ios xcode ipad


【解决方案1】:

为什么要创建 Poemsview 作为 Navigation Controller 的 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];

您可以创建另一个导航控制器作为Sub-class of 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];

现在您可以从您的tableview DidselectRowAtindexpath 推送详细视图。

【讨论】:

  • 我知道,但是导航控制器没有推送 detailViewController 例如因为它的根没有定义!
  • 你检查过我的代码吗self.viewcontrollerrootviewcontroller
  • 他说得对,你的rootViewController是导航控制器,栈底有self.viewController。应该可以,试试看。
  • 谢谢,但您的代码不会像我说的那样将诗歌视图控制器推送到详细视图控制器:)
  • ViewController 是我的主视图,其中有哪些菜单,然后用户点击 Poems 按钮,它通过模态转换样式呈现 PoesmViewController。然后我在那里有一个表格视图,用户触摸每个单元格,然后它应该推送到 detailViewController PoemsViewContrller 继承自 UIViewController 类而不是 UINAvigationController 所以我定义了一个自定义导航控制器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多