將 EventNameViewController 的 view 作為子視圖加入父視圖,其內部按鈕呼叫 pushViewController 無效果。
子視圖控制器 不在導航控制器堆疊中,self.navigationController 為 nil。
// 子視圖控制器
@protocol EventNameViewDelegate
- (void)eventNameViewDidSelectNext:(UIViewController *)nextVC;
@end
@interface EventNameViewController : UIViewController
@property (weak) id delegate;
@end
// 父視圖控制器實現代理
- (void)eventNameViewDidSelectNext:(UIViewController *)nextVC {
[self.navigationController pushViewController:nextVC animated:YES];
}
// 子視圖按鈕動作
- (IBAction)nextButtonTapped {
NextViewController *next = [[NextViewController alloc] init];
[self.delegate eventNameViewDidSelectNext:next];
}
// 父視圖控制器
[self addChildViewController:childVC];
[self.containerView addSubview:childVC.view];
[childVC didMoveToParentViewController:self];
// 此時 childVC.navigationController 指向父視圖的 navigationController
// 可直接 [self.navigationController pushViewController:next animated:YES];
addSubview:child.view 不建立父子控制器關係addChildViewController: + didMoveToParentViewController: