8

我正在编写一个处理日历的应用程序。在应用程序中,我显示了所有可用日历的列表,供用户启用或禁用。我没有EventKitUI框架用于我自己的设计和 UI。

calendars通过轮询对象的属性,我得到了一份整洁的日历列表EKEventStore。但是,在我的设备上,EKCalendar该列表中有一个对象​​显示在EKEventKitUI. 这是调试器中对象的描述:

EKCalendar <0xcea6b60> {title = Agenda; type = Local; allowsModify = YES; color = #711A76;}

我正在用荷兰语运行我的 iPhone,这就是为什么标题是“议程”而不是“日历”的原因,但如果你用英语运行 iPhone,这就是你会看到的。看起来这是 iOS 的默认日历,但由于我已将所有日历设置为与 iCloud 同步,因此内置日历应用程序已禁用它。我也想在我自己的应用程序中禁用它,但我不知道如何。

从查看属性EKCalendar我无法辨别一个决定我应该“隐藏”哪个日历。这个默认日历的type属性是“本地”,但如果有人不使用 iCloud,我想所有的日历都是本地类型的。subscription不是,也不是allowsContentModifications。我见过一些人根据它的 title 隐藏默认日历的例子,但正如你所看到的,标题是本地化的,因此非常不切实际,感觉不对。

为了与常规 iCal/Calendar 应用程序显示的日历列表平行,决定哪个日历是默认日历以及是否隐藏它的技巧是什么?

编辑:虽然问题被标记为已回答,但答案包含一个很大的“不,你不能”。我通过添加设置面板开关来“隐藏本地日历”为我的用户解决了这个问题,但这是一个非常非常不雅的解决方案。

4

1 回答 1

5

要以粗体字回答您的问题,没有可用于确定是否应隐藏或显示日历的神奇属性。

但是,如果您的理论是正确的,如果其他日历类型可用(iCloud/MobileMe、Exchange、CalDAV 等),日历应用程序隐藏“本地”日历,那么您可以使用EKSource数组在代码中镜像其逻辑EKEventStore

EKEventStore *store = [[EKEventStore alloc] init];

for (EKSource *source in store.sources)
    if (source.sourceType == EKSourceTypeExchange || source.sourceType == EKSourceTypeCalDAV)
    {
        //Your custom logic here to determine if the local cal should be hidden.
        break;
    }

您可以在此处找到 EKSourceType 常量的完整列表:http: //developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

于 2012-05-10T09:59:05.610 回答