8

カレンダーを扱うアプリを書いています。アプリでは、ユーザーが有効または無効にできるすべての利用可能なカレンダーのリストを表示しています。私は自分のデザインと UI のためにフレームワークを使用していません。EventKitUI

calendarsオブジェクトのプロパティをポーリングして、カレンダーのきちんとしたリストを取得しEKEventStoreます。ただし、私のデバイスでは、そのEKCalendarリストに. これは、デバッガーでのオブジェクトの説明です。EKEventKitUI

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

私はオランダ語で iPhone を実行しているため、タイトルが「カレンダー」ではなく「アジェンダ」になっていますが、iPhone を英語で実行すると、それが表示されます。これは iOS のデフォルト カレンダーのようですが、すべてのカレンダーが iCloud と同期するように設定されているため、組み込みのカレンダー アプリでは無効になっています。自分のアプリでも無効にしたいのですが、方法がわかりません。

のプロパティをEKCalendar見ると、どのカレンダーを「非表示」にするかを決定するためのものを識別できません。このデフォルトのカレンダーには「ローカル」というtypeプロパティがありますが、誰かが iCloud を使用していない場合、すべてのカレンダーがローカル タイプであると思います。subscriptionそうでもないし、そうでもないallowsContentModificationstitle に基づいてデフォルトのカレンダーを非表示にする人々の例を見てきましたが、ご覧のとおり、タイトルはローカライズされているため、非常に非現実的です。

通常の iCal/Calendar アプリが表示するカレンダーのリストと同じにするために、どのカレンダーをデフォルトのカレンダーにするか、非表示にするかどうかを決定するコツは何ですか?

編集:質問は回答済みとしてマークされましたが、回答には大きな「いいえ、できません」が含まれています。「ローカルカレンダーを非表示にする」設定パネルスイッチを追加することで、ユーザーのためにこの問題を解決しましたが、それは非常に洗練されていない解決策です。

4

1 に答える 1

5

To answer your question in bold, there isn't a magic property you can use to determine if a calendar should be hidden or displayed.

However, if your theory is correct about the Calendar app hiding the "local" calendar if other calendar types are available (iCloud/MobileMe, Exchange, CalDAV, etc), then you can mirror its logic in your code using the EKSource array in 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;
    }

You can find the full list of EKSourceType constants here: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

于 2012-05-10T09:59:05.610 に答える