繁体   English   中英

在iOS SDK中初始化视图控制器

[英]Initialize the view controller in iOS sdk

我有一个名为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按下按钮时。

错误与问题它向我显示错误

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'

错误的原因这是因为CKCalendarViewControllerUINavigationController的子类。 如果我尝试打开模式视图,则效果很好。

但我怎么能初始化CKCalendarViewController如上图所示,与CKCalendarViewControllerInternal类?

谢谢,

答案将不胜感激

如果我正确理解您在做什么,那么使事情正常工作的最简单的“变态”方法就是使CKCalendarViewController派生自CKCalendarViewControllerInternal 我建议这样做是因为我看到您正在尝试将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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM