我查看了所有其他类似问题,但找不到解决方案。
我的 iPad Storyboard有一个标签栏 Controller 作为“初始 View Controller ”,它通过“关系顺序 View Controller ”链接到导航 Controller ,导航 Controller 通过“ Root View ”链接链接到 View Controller A,它有一个 UIButton,它通过“手动序列推送”链接到 View Controller B。
Tab Bar Cntrl => Navigation Cntrlr ==(root view)==> View Cntrl A, UIButton ==(push)==> View Cntrl B
因此,在运行时,在显示 View Controller A 的情况下,按下其 UIButton 需要更改为 View Controller 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");
}
}
Storyboard设置:
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)
输出:……
当委托(delegate)触发时,它会显示已全部设置的指针:
mainStoryboard = 1f8b4900
MANAGE_UINavigationController = 1e5d45f0
schedule_UIViewController 2 = 1e5d4b20
我是否缺少一些初始化?
最佳答案
“实例化”一词告诉您正在创建一个新实例。因此,当您调用时:
UINavigationController *MANAGE_UINavigationController = (UINavigationController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MANAGE_Storyboard_ID"];
您正在创建一个新导航 Controller ,该 Controller 当前不属于可见层次结构。
尽管您的对象和调用可能没问题,但您并未与管理屏幕的 Controller 进行交互。
(注意:如果您使用符合 Apple 标准的代码风格,其他人会更容易分析您编写的内容。)
关于ios - UINavigationController pushViewController 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883688/