gpt4 book ai didi

ios - 在 iOS sdk 中初始化 View Controller

转载 作者:行者123 更新时间:2023-11-29 10:58:02 26 4
gpt4 key购买 nike

我有一个名为 CKCalendarViewControllerInternal 的自定义 View Controller 。

CKCalendarViewControllerInternal

这个类是UIViewController的子类。

CkCalendarViewController

我有一个名为 CKCalendarViewController 的自定义 View Controller 。它是 UINavigationController 的子类,如下所示:

@interface CKCalendarViewController : UINavigationController <CKCalendarViewDelegate, UINavigationControllerDelegate>

这个类是用 CKCalendarViewControllerInternal 初始化的,如下所示:

- (id)init
{
CKCalendarViewControllerInternal *calendarViewController = [CKCalendarViewControllerInternal new];

self = [super initWithRootViewController:calendarViewController];
}

现在,在 AppDelegate 中,我的第一个 View 如下:

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 时。

错误和问题它向我显示类似

的错误

异常:不支持推送导航 Controller
异常:[NSException]:不支持推送导航 Controller
ex.name:'NSInvalidArgumentException'
ex.reason:'不支持推送导航 Controller '

错误原因这是因为 CKCalendarViewControllerUINavigationController 的子类。如果我尝试打开模态视图,它会完美运行。

但是我如何使用 CKCalendarViewControllerInternal 类初始化 CKCalendarViewController

谢谢

回答将不胜感激

最佳答案

如果我正确理解您在做什么,使事情正常进行的最简单的“hackish”方法是使 CKCalendarViewController 派生自 CKCalendarViewControllerInternal。我建议这样做是因为我看到您正在尝试将 CKCalendarViewController 用作普通 View Controller ,因此没有理由将其用作导航 Controller 。

另一种可能性是,您可以通过在您的应用委托(delegate)中执行以下操作,将您的 CKCalendarViewController 实际用作导航 Controller :

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

但这取决于您要实现的目标。

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

[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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com