我有一个名为CKCalendarViewControllerInternal
的自定义视图控制器。
CKCalendarViewController内部
此类是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
按下按钮时,点击了。错误和问题
它显示了我的错误
Exception: Pushing a navigation controller is not supportedException: [NSException]:Pushing a navigation controller is not supportedex.name:'NSInvalidArgumentException'ex.reason:'Pushing a navigation controller is not supported'
错误原因
这是因为
CKCalendarViewController
是UINavigationController
的子类。如果我尝试打开模式视图,则效果很好。
但是如何使用
CKCalendarViewController
类初始化如上所示的CKCalendarViewControllerInternal
? ,谢谢,
答案将不胜感激
最佳答案
如果我正确理解您在做什么,那么使事情正常工作的最简单的“骇人听闻”方法就是使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];
关于ios - 在iOS SDK中初始化 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17336168/