1

我有一个名为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

视图控制器.m

当我尝试按下CKDemoViewController打开按钮时。

错误和问题 它向我显示错误,例如

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

谢谢,

答案将不胜感激

4

1 回答 1

2

如果我正确理解你在做什么,最简单的“hackish”方法就是CKCalendarViewControllerCKCalendarViewControllerInternal. 我建议这样做是因为我看到您正在尝试将您的CKCalendarViewController用作普通视图控制器,因此没有理由将其用作导航控制器。

另一种可能性是您可以CKCalendarViewController通过在您的应用程序委托中执行此操作来实际使用您的导航控制器:

UINavigationController *n1 = [[CKCalendarViewController alloc]init];
n1.viewControllers = [[NSArray alloc]initWithObjects:self.viewController, nil];
self.window.rootViewController = n1;

但这取决于您要达到的目标。

更一般地说,如果您对在控制器中“嵌套”控制器感兴趣,您应该了解控制器包含。在控制器包含中,将控制器添加到另一个控制器的操作基本上是这样的:

[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
于 2013-06-27T07:43:40.877 回答