3

在 iPhone 上使用 EventKit 时,我注意到可能存在一些无法修改的事件。到目前为止,我遇到的示例是与 CalDAV 同步的生日和事件。当您在 iPhone 上的标准内置日历应用程序中查看事件的详细信息时,右上角的“编辑”按钮在这些情况下不可见,而在查看“正常”事件时它会可见。

我到处搜索,阅读所有文档,但我根本找不到任何告诉我如何检测这种行为的东西!我只能在之后检测到它:

  1. 编辑活动的标题
  2. 将其保存到事件存储
  3. 检查事件的标题,如果它没有改变它是不可编辑的!

我正在寻找一种方法来预先检测事件的不可编辑行为。我知道这是可能的,因为我已经看到其他日历应用程序正确地实现了这一点。

4

5 回答 5

9

好的,好像 SDK 没有为我提供任何我可以用来检查 EKEvent 是否为只读的东西。我通过创建一个将“isReadOnly”方法添加到所有 EKEvent 实例的类别来创建一个解决方法。

EKEvent+ReadOnlyCheck.h

@interface EKEvent(ReadOnlyCheck)
- (BOOL) isReadOnly;
@end`

EKEvent+ReadOnlyCheck.m

#import "EKEvent+ReadOnlyCheck.h"

@implementation EKEvent(ReadOnlyCheck)

- (BOOL) isReadOnly {
    BOOL readOnly;
    NSString *originalTitle = [self.title retain];
    NSString *someRandomTitle = [NSString stringWithFormat:@"%i", arc4random()];

    self.title = someRandomTitle;
    readOnly = [originalTitle isEqualToString:self.title];
    self.title = originalTitle;
    [originalTitle release];

    return readOnly;
}
@end

当上述文件到位后,我可以简单地调用isReadOnly我选择的 EKEvent。

#import "EKEvent+ReadOnlyCheck.h"
...
if ([event isReadOnly]) {
    // Do your thing
}
...
于 2010-12-19T15:28:47.837 回答
7

我还没有使用过 Event Kit,但从文档来看,可编辑性似乎是日历的属性,而不是事件的属性。event.calendar获取事件的日历,并calendar.allowsContentModifications告诉您日历是只读的还是可读写的。

于 2010-12-17T22:33:55.337 回答
1

在显示视图之前尝试 EKEventViewController 的 allowedEditing 属性。

于 2011-03-23T13:38:52.807 回答
1

是的。有可能的。代码如下所示:尝试通过记录我使用可编辑/不可编辑事件的对象的输出来与代码相关联,您将了解其工作原理:)

EKEventViewController *controller = [[EKEventViewController alloc] init];
controller.event = myEvent; /*myEvent is of type EKEvent*/          
if(controller.navigationItem.leftBarButtonItem != NULL)
{
    /*Event is Editable, Your code here*/
}
于 2012-07-11T05:21:23.393 回答
1

我认为添加此类别方法来EKEvent处理事件不可编辑的所有情况:

- (BOOL)isReadOnly {
    if (self.calendar.allowsContentModifications == NO) return YES;
    if (self.organizer && [self.organizer isCurrentUser] == NO) return YES;
    return NO;
}
于 2015-11-24T22:54:53.517 回答