1

我正在尝试在我的项目中使用 Kal 日历。到目前为止,这是我所理解的情况:

  • 无论哪个视图控制器调用 Kal 都必须实现 UITableViewDelegate 方法“didSelectRowAtPath”

问题:

  • 我调用 Kal 的视图控制器已经有一个现有的 tableview(其中一个单元格会调用 Kal)

为了解决这个问题,我尝试从我的主表视图中的一个单元格推送一个中间视图控制器,如下所示:

ScheduleViewController *svc = [[ScheduleViewController alloc] init];
[svc setTitle:@"Schedule"];
[self.navigationController pushViewController:svc animated:YES];

从 ScheduleViewController 的 viewDidLoad,我推送实际的 Kal 日历:

KalViewController *kal = [[KalViewController alloc] init];
[kal setDelegate:self];
[kal setTitle:@"Schedule"];
[self.navigationController pushViewController:kal animated:NO];

所以一旦我这样做了,我就可以让日历显示出来。但是,我似乎无法使用返回按钮干净地返回主菜单。我在 ScheduleViewController 中创建了一个后退按钮:

[kal.navigationItem
setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                     style:UIBarButtonItemStyleBordered
                                                    target:self
                                                    action:@selector(test)]];

我已经把它放在几个不同的地方(viewDidLoad、viewWillAppear)并且无法让它工作。当我单击“返回”时,它仍然会转到 ScheduleViewController 而不是一直返回。“测试”永远不会被调用。我已经尝试过 popToRootViewController、[[self.presentingViewController presentingViewController]dismissViewController] 和其他一些。就是不想工作。

  • 这是使用 Kal 的最佳方式吗?
  • 如何使用此方法 popToRootViewController(跳过 ScheduleViewController)?

谢谢!这是我的第一篇文章,所以如果我能做些什么来让这个问题不那么混乱,请告诉我。

4

1 回答 1

0

好吧,我想终于明白了。我最终删除了中间视图控制器。我想我只是不明白之前发生了什么......我现在做了以下事情:

  • 而不是我的主视图控制器(w/现有的 tableview)作为委托,我让 KalDataSource 也成为 UITableViewDelegate。所以我的 DataSource 处理填充日历和选择事件。

  • 在主视图控制器中添加了 id 数据源,如 ivar 中的

  • 将“didSelectRowAtPath”方法更改为:

    dataSource = [[EventsDataSource alloc] init];

    KalViewController *kal = [[KalViewController alloc] init]; [kal setDelegate:dataSource]; [kal setDataSource:dataSource]; [kal setTitle:@"Schedule"]; [self.navigationController pushViewController:kal 动画:YES];

现在一切似乎都很好。

于 2012-11-04T14:35:25.700 回答