2012-05-10 75 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

相關問題