我有一个名为CKCalendarViewControllerInternal
的自定义视图控制器。
CKCalendarViewControllerInternal
此类是UIViewController
的子类。
CkCalendarViewController
我有一个名为 CKCalendarViewController 的自定义视图控制器。它是UINavigationController
的子类,如下所示:
@interface CKCalendarViewController : UINavigationController <CKCalendarViewDelegate, UINavigationControllerDelegate>
此类使用CKCalendarViewControllerInternal
进行初始化,如下所示:
- (id)init
{
CKCalendarViewControllerInternal *calendarViewController = [CKCalendarViewControllerInternal new];
self = [super initWithRootViewController:calendarViewController];
}
现在,在AppDelegate
我的第一个视图如下:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
UINavigationController *n1=[[UINavigationController alloc]init];
n1.viewControllers=[[NSArray alloc]initWithObjects:self.viewController, nil];
self.window.rootViewController=n1;
[self.window makeKeyAndVisible];
return YES;
}
CkDemoViewController
此类是CkCalendarViewController
的子类,如下所示
@interface CKDemoViewController : CKCalendarViewController
ViewController.m
当我尝试按下CKDemoViewController
按钮时单击。
错误&amp;问题 它显示我的错误
Exception: Pushing a navigation controller is not supported
Exception: [NSException]:Pushing a navigation controller is not supported
ex.name:'NSInvalidArgumentException'
ex.reason:'Pushing a navigation controller is not supported'
错误原因
这是因为CKCalendarViewController
是UINavigationController
的子类。
如果我尝试打开模态视图,它会完美运行。
但是如何使用CKCalendarViewController
类初始化CKCalendarViewControllerInternal
如上所示?
谢谢,
答案非常感谢
答案 0 :(得分:2)
如果我理解你正在做什么,那么让事情有效的最简单的“hackish”方法就是CKCalendarViewController
来自CKCalendarViewControllerInternal
。我建议这样做是因为我发现您正在尝试将CKCalendarViewController
用作普通视图控制器,因此没有理由让它成为导航控制器。
另一种可能性是,您可以在应用代理中实际使用CKCalendarViewController
作为导航控制器:
UINavigationController *n1 = [[CKCalendarViewController alloc]init];
n1.viewControllers = [[NSArray alloc]initWithObjects:self.viewController, nil];
self.window.rootViewController = n1;
但这取决于你想要达到的目标。
更一般地说,如果您对控制器中的“嵌套”控制器感兴趣,您应该了解controller containment。在控制器包含中,你将控制器添加到另一个控制器的工作基本上是这样的:
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];