epo*_*gee 8 cocoa-touch calendar objective-c eventkit
我正在编写一个处理日历的应用程序.在应用程序中,我显示了用户启用或禁用的所有可用日历的列表.我没有将EventKitUI框架用于我自己的设计和UI.
通过轮询对象的calendars属性,我得到了一个整洁的日历列表EKEventStore.但是,在我的设备上,EKCalendar该列表中有一个对象未显示EKEventKitUI.这是调试器中对象的描述:
EKCalendar <0xcea6b60> {title = Agenda; type = Local; allowsModify = YES; color = #711A76;}
Run Code Online (Sandbox Code Playgroud)
我用荷兰语运行我的iPhone,这就是为什么标题是"日程"而不是"日历",但如果你用英语运行iPhone,那就是你会看到的.看起来这是iOS的默认日历,但由于我将所有日历设置为与iCloud同步,因此内置日历应用程序禁用它.我想在我自己的应用程序中禁用它,但我不知道如何.
从查看属性EKCalendar我无法辨别出我应该"隐藏"哪个日历.type这个默认日历的属性是"本地",但如果有人没有使用iCloud,我想所有的日历都是本地类型.subscription既不是,也不是allowsContentModifications.我已经看到人们根据它的标题隐藏默认日历的例子,但正如你所看到的,标题是本地化的,因此非常不切实际,只是感觉不对.
决定哪个日历是默认日历以及是否隐藏日历的诀窍是什么,以便与您的常规iCal /日历应用程序显示的日历列表并行?
编辑:虽然问题被标记为已回答,但答案中包含一个很大的"不,你不能".我通过添加设置面板开关来"隐藏本地日历"为我的用户解决了这个问题,但这是一个非常非常不优雅的解决方案.
要以粗体回答您的问题,您无法使用魔法属性来确定是否应隐藏或显示日历.
但是,如果你的理论是正确的日历应用程序隐藏"本地"日历,如果其他日历类型可用(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;
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到EKSourceType常量的完整列表:http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html