添加 Kal 日历作为标签栏项目的根控制器,不使用导航控制器
Posted
技术标签:
【中文标题】添加 Kal 日历作为标签栏项目的根控制器,不使用导航控制器【英文标题】:adding Kal Calendar as root controller for tab bar item, not using nav controller 【发布时间】:2011-08-28 23:49:56 【问题描述】:Kal 日历控制器的例子都是在应用委托中初始化控制器并推送到一个navigationController。我试过了,它确实有效,但是我需要我的日历成为我的 Tabbar 项目之一的 rootController,该项目已添加到主笔尖中。
我尝试在项目的 nib 中添加一个 UIViewController 类作为根类,然后在视图控制器中初始化日历:
KalViewController *calendar = [[KalViewController alloc] init];
[self.view addSubview:calendar];
[calendar release];
如果我触摸月份、日期等,它会显示但崩溃...
另外,我创建了一个基于 KalViewController 的类,并将其作为我的标签栏项目的根类。但这会立即崩溃而不显示。
也许可以将 KalViewController 直接添加到选项卡栏 viewController 数组中,但是我使用应用程序委托在 nib 中创建了选项卡栏。我不知道如何添加它。
【问题讨论】:
【参考方案1】:我最近不得不这样做,我将日历选项卡留在 MainWindow.xib 之外,然后在 appDelegate 中,我抓取 ViewControllers 的 tabBarControllers 列表,将它们加载到 mutableArray 中,将 KalViewController 插入我想要的位置,然后设置它回到 tabBarController。
calendarDataSource = [[CalendarDataSource alloc] init];
// I had to override a few things in the calendar so I subclassed it. You get the idea though
_kalViewController = [[MyKalViewController alloc] init];
_kalViewController.dataSource = self.calendarDataSource;
_kalViewController.delegate = _kalViewController;
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:_kalViewController] autorelease];
navigationController.tabBarItem.title = @"Calendar";
navigationController.tabBarItem.image = [UIImage imageNamed:@"cal-tab.png"];
NSMutableArray *viewControllers = [self.tabBarController.viewControllers mutableCopy];
[viewControllers insertObject:navigationController atIndex:1];
self.tabBarController.viewControllers = viewControllers;
【讨论】:
太棒了!我会让你知道情况如何。因此,将 Kal 作为子视图添加到视图控制器时对您来说也是错误的? 是的,事后看来,如果 Kal 没有完全按照您的意愿进行操作,请不要使用它。我不得不大量定制它的外观,事实证明这是一场噩梦。真的不是 Kal 的错,我早该知道的。 但是没有与默认日历的外观和功能相匹配的替代方案吗?如果可能的话,我只需要将特殊格式作为数据源提供给它;只列出事件。我不确定我是否需要特殊功能。 那么应该很好用。我只是说,如果您需要自定义外观,只需让您自己:)以上是关于添加 Kal 日历作为标签栏项目的根控制器,不使用导航控制器的主要内容,如果未能解决你的问题,请参考以下文章