UINavigationController pushViewController 不起作用
Posted
技术标签:
【中文标题】UINavigationController pushViewController 不起作用【英文标题】:UINavigationController pushViewController does not work 【发布时间】:2014-04-05 16:38:59 【问题描述】:我已经查看了所有其他类似的问题,但找不到解决方案。
我的 iPad 故事板有一个选项卡栏控制器作为“初始视图控制器”,它通过“关系序列视图控制器”链接到导航控制器,导航控制器通过“根视图”链接链接到视图控制器 A,后者有一个 UIButton,它通过“手动序列推送”链接到视图控制器 B。
Tab Bar Cntrl => Navigation Cntrlr ==(root view)==> View Cntrl A, UIButton ==(push)==> View Cntrl B
因此,在运行时,显示视图控制器 A,按下其 UIButton 需要更改为视图控制器 B。但是没有任何反应......
响应 UIBUTTON(按住手势)的代表............
- (void)schedule_long_press_delegate:(UILongPressGestureRecognizer *)recognizer if (recognizer.state == UIGestureRecognizerStateEnded) printf("Long press Ended ................. \n");
// Get storyboard:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad"
bundle: nil];
printf("mainStoryboard = %x \n", (int)mainStoryboard ); // !!! ax
// Get nav controller for MANAGE view:
UINavigationController *MANAGE_UINavigationController = (UINavigationController*)[mainStoryboard
instantiateViewControllerWithIdentifier: @"MANAGE_Storyboard_ID"];
printf("MANAGE_UINavigationController = %x \n", (int)MANAGE_UINavigationController ); // !!! ax
// Get MANAGE view's view controller:
SCHEDULE_UIViewController *schedule_UIViewController = [self.storyboard instantiateViewControllerWithIdentifier:
NSStringFromClass([SCHEDULE_UIViewController class])];
printf("schedule_UIViewController = %x \n", (int)schedule_UIViewController ); // !!! ax
// Change screen to MANAGE view:
[MANAGE_UINavigationController pushViewController: schedule_UIViewController animated:YES];
else
printf("Long press detected ..................... \n");
故事板设置:
UITabBarController ... Storyboard ID is blank. ..links to: UINavigationController ... Class=UINavigationController StoryboardID = "MANAGE_Storyboard_ID" ..links to: UIViewController ... Class=acc StoryboardID is blank (INITIAL VIEW) ..links to: UIViewController ... Class & StoryboardID = "SCHEDULE_UIViewController" (TARGET VIEW)
输出:........
当委托触发时,它会显示所有已设置的指针:
mainStoryboard = 1f8b4900
MANAGE_UINavigationController = 1e5d45f0
schedule_UIViewController 2 = 1e5d4b20
我缺少一些初始化吗?
【问题讨论】:
请重新格式化..无法得到代码是什么.. 【参考方案1】:“实例化”一词告诉您正在创建一个新实例。因此,当您调用时:
UINavigationController *MANAGE_UINavigationController = (UINavigationController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MANAGE_Storyboard_ID"];
您正在创建一个新的导航控制器,它不是当前可见层次结构的一部分。
虽然您的对象和调用可能没问题,但您并没有与管理屏幕的控制器进行交互。
(注意:如果您使用符合 Apple 标准的代码样式,其他人会更容易分析您编写的内容。)
【讨论】:
那么应该如何将 MANAGE_UINavigationController 设置为实际的故事板 UINavigationController,它的故事板 ID 为“MANAGE_Storyboard_ID”? 假设包含此代码的视图控制器是活动控制器并由导航控制器管理,您可以要求它自己的[self navigationController];
。 navigationController
的 Apple 文档:“视图控制器层次结构中最近的祖先是导航控制器。”以上是关于UINavigationController pushViewController 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr
从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)