5

当 EKEventViewController 完成编辑事件时,我没有接到我的 eventViewController:didCompleteWithAction: 电话。

这是我的设置方式:


- (void)showCalendar:(id)sender {
    EKEventViewController *eventViewController = [[EKEventViewController alloc] init];

    eventViewController.delegate = self;

    eventViewController.event = self.event;

    // Allow event editing.
    eventViewController.allowsEditing = YES;

    [self.navigationController pushViewController:eventViewController animated:YES];
    [eventViewController release];
}

我的班级确实有协议,并且该方法是通过复制和粘贴文档中的定义来实现的。它只是没有被调用。

如果我使用 EKEventEditViewController 及其相应的委托,那么在保存事件时会调用它。

我也能够在 SimpleEKDemo 代码中重现该问题。有谁知道可能出了什么问题?

我可以放弃视图功能并直接进入 EKEventEditViewController,但我宁愿不这样做。

4

4 回答 4

4

可能有点晚了,但我也遇到了这个问题。

为了解决这个问题,我对它进行了子类EKEventViewController化,然后在子类中,viewDidLoad我用我自己的一个替换了标准编辑按钮:


- (void)viewDidLoad {
    [super viewDidLoad];
    UIBarButtonItem *editItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self.delegate action:@selector(editCalEvent)];

    self.navigationItem.rightBarButtonItem = editItem;
}


这样,当您想要编辑事件时,您可以设置自己的事件EKEventEditViewController并指定其委托以响应更改:


- (void)editCalEvent {

    EKEventEditViewController *editController = [[EKEventEditViewController alloc] init];

    editController.event = editingEvent;
    editController.eventStore = self.eventStore;
    editController.editViewDelegate = self;

    [self presentModalViewController:editController animated:YES];

    [editController release];

}


希望有帮助。

于 2011-03-12T05:31:37.607 回答
2

我在使用“pushViewController”时遇到了类似的问题,结果是它会转到

- (void)navigationController:(UINavigationController *)navigationController 
  willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{}

但是在我更改为 之后presentModalViewController,它会eventViewController:didCompleteWithAction:在按下 Done/Cancel/Delete 时进入。

于 2012-02-20T06:03:35.910 回答
1

在这个 .m 文件中,您需要导入 EventKit/EventKit.h 和 EventKitUI/EventKitUI.h,在 .h 文件中,您需要实现“EKEventViewDelegate”委托。

希望对你有帮助

于 2011-01-25T08:27:36.453 回答
0

这似乎是图书馆中一个相当明显的遗漏。我的解决方法:我在 UINavigationController 中展示 EKEventViewController。我在控制器的 viewWillAppear 方法中检测到完成,而不是将 EKEventViewController 推到视图堆栈上。在此视图控制器中使用布尔变量来跟踪和区分由于 EKEventViewController 被弹出而导致的初始外观和重新出现。您的代码可能会在其他时间被调用,但如果您只是刷新表格视图等,那么这应该足够了。

于 2015-01-13T17:20:40.530 回答