推送视图不从基于单个视图的应用程序推送 UIViewController

Posted

技术标签:

【中文标题】推送视图不从基于单个视图的应用程序推送 UIViewController【英文标题】:Push view not pushing UIViewController from single view based application 【发布时间】:2012-05-04 16:52:22 【问题描述】:

我选择项目模板作为“单一视图”。我试图在按钮单击上推送详细视图(UIViewController)。按钮操作正在正确触发并执行代码 [self navigatingController] 推送......我的代码是:

MapDetailViewController *mapDetailViewController = [[MapDetailViewController alloc] init];
    [self.navigationController pushViewController:mapDetailViewController animated:YES];
    NSLog(@"self.navigation is as %@",self.navigationController);  

self.navigationController 为空。所以我尝试分配初始化导航控制器类型的局部变量,并且该变量能够为非空(一些十六进制值),但我仍然无法推送 mapDetailView。 我在想的是我选择了错误的模板(基于视图)。我应该选择基于导航的(主细节)。下面自动生成的代码是应用程序委托的:

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;  

是否应该在此处对导航控制器进行一些更改? 有什么建议吗?

【问题讨论】:

【参考方案1】:

您的问题是您甚至没有导航控制器来进行推送。将您的代码更改为:

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

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES; 

【讨论】:

很好的答案,但应该指出,这段代码属于创建初始视图控制器的位置,通常在应用程序委托中。 @Mark 很好,它解决了我的问题,但是现在在我的 rootviewController 上显示导航栏(显然)。我可以使用 isHidden:YES,使其隐藏。有没有其他方法所以我可以在不将导航控制器设置为 rootViewController 的情况下推送我的详细视图控制器。 迦勒:已修复。 Maddy:弹出和推送视图时通常使用导航栏。我不确定没有一个推/弹出,但你应该记住,使用一个你会自动为用户生成一个后退按钮,这是一种在整个 ios 中普遍存在的设计模式。 @mark 我在viewWillAppear 的masetr uiviewcontrol 中隐藏了导航栏。现在,当我推动detailview 时,detailView 中没有导航栏。为什么?我只隐藏在主 UIViewController 中。所以我明确强制 detailView 控制器的导航栏为隐藏:否。现在我注意到的是,当我点击详细视图控制器中的后退按钮并弹出到后全!详细视图中的顶部导航栏变成黑色(在转换到 masterViewController 时)或者说我从 detailViewController 上下移动的视图是空白区域。 我不相信有一种干净的方法可以隐藏导航栏并以您想要的方式显示。我建议一直把它放在那里。它通常在主视图中用于放置 UIBarButtonItems。

以上是关于推送视图不从基于单个视图的应用程序推送 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

在 TTNavigator (Three20) 中使用单个 URL 推送两个 UIViewController

UINavigationController 没有推送/显示视图

如何在swift中基于Json id从集合视图didSelectItemAt推送不同的视图控制器

从 UIView ios 推送视图控制器

从自定义 NSObject 内部视图推送导航应用程序中的新视图

带有搜索图标的 UINavigationBar - 单击时推送模态搜索视图