3

iPhone で EventKit を使用しているときに、変更できないイベントが存在する可能性があることに気付きました。これまでに遭遇した例は、CalDAV と同期された誕生日やイベントです。iPhone の標準のビルトイン カレンダー アプリでイベントの詳細を表示すると、「通常の」イベントを表示すると表示される右上隅の [編集] ボタンが表示されません。

どこでも検索し、そこにあるすべてのドキュメントを読みましたが、この動作を検出する方法を教えてくれるものは何も見つかりません! 後でしか検出できません:

  1. イベントのタイトルを編集する
  2. イベントストアに保存する
  3. イベントのタイトルを確認してください。変更されていない場合は編集できません。

イベントの編集不可能な動作を事前に検出できる方法を探しています。他のカレンダー アプリがこれを正しく実装しているのを見たので、これが可能であることはわかっています。

4

5 に答える 5

9

SDK は、EKEvent が読み取り専用かどうかを確認するために使用できるものを何も提供していないように見えます。すべての EKEvent インスタンスに「isReadOnly」メソッドを追加するカテゴリを作成することで、回避策を作成しました。

EKEvent+ReadOnlyCheck.h

@interface EKEvent(ReadOnlyCheck)
- (BOOL) isReadOnly;
@end`

EKEvent+ReadOnlyCheck.m

#import "EKEvent+ReadOnlyCheck.h"

@implementation EKEvent(ReadOnlyCheck)

- (BOOL) isReadOnly {
    BOOL readOnly;
    NSString *originalTitle = [self.title retain];
    NSString *someRandomTitle = [NSString stringWithFormat:@"%i", arc4random()];

    self.title = someRandomTitle;
    readOnly = [originalTitle isEqualToString:self.title];
    self.title = originalTitle;
    [originalTitle release];

    return readOnly;
}
@end

上記のファイルが配置されたらisReadOnly、選択した EKEvent を呼び出すだけです。

#import "EKEvent+ReadOnlyCheck.h"
...
if ([event isReadOnly]) {
    // Do your thing
}
...
于 2010-12-19T15:28:47.837 に答える
7

私はまだ Event Kit を使っていませんが、ドキュメントによると、編集可能性はイベントではなくカレンダーの特性のようです。event.calendarイベントのカレンダーを取得しcalendar.allowsContentModifications、カレンダーが読み取り専用か読み書き可能かを示します。

于 2010-12-17T22:33:55.337 に答える
1

はい。可能です。コードは次のようになります: 編集可能/編集不可能なイベントで使用するオブジェクトの出力をログに記録することにより、コードに関連付けてみてください。動作を理解できます:)

EKEventViewController *controller = [[EKEventViewController alloc] init];
controller.event = myEvent; /*myEvent is of type EKEvent*/          
if(controller.navigationItem.leftBarButtonItem != NULL)
{
    /*Event is Editable, Your code here*/
}
于 2012-07-11T05:21:23.393 に答える
1

ビューを表示する前に、EKEventViewController の allowEditing プロパティを試してください。

于 2011-03-23T13:38:52.807 に答える