2012-05-10 44 views
7

我在写一个处理日历的应用程序。在应用程序中,我正在显示用户启用或禁用的所有可用日历的列表。我是而不是使用EventKitUI框架来实现我自己的设计和用户界面。如何判断是否可以隐藏默认的EKCalendar'日历'?

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

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

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

从看the properties of EKCalendar我看不出一个决定我应该'隐藏'的日历。这个默认日历有'本地'type属性,但如果有人不使用iCloud,我想所有的日历都是本地类型。 subscription是不是也不是allowsContentModifications。我见过examples of people hiding the default calendar based on it's title,但正如你所看到的,标题是本地化的,因此非常不切实际,只是感觉不对。

为了与常规iCal/Calendar应用程序显示的日历列表并行排列,确定哪个日历是默认日历以及是否隐藏日历有什么用?

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

回答

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

+0

是的,这就是我现在做什么,但这种感觉如此错误呢! – epologee

相关问题