2010-12-17 25 views
3

在iPhone上使用EventKit時,我注意到有些事件可能存在,無法修改。迄今爲止遇到的例子是生日和事件與CalDAV同步。當您在iPhone上的標準內置日曆應用程序中查看事件的詳細信息時,右上角的「編輯」按鈕在這些情況下不可見,並且在查看「正常」事件時可見。iPhone:如何檢測是否可以修改EKEvent實例?

我到處搜索過,閱讀所有文檔,但我根本找不到任何能告訴我如何檢測這種行爲!我只能檢測它算賬:

  1. 編輯事件的標題
  2. 保存到事件存儲
  3. 檢查事件的標題,如果它並沒有改變它是不可編輯的!

我正在尋找一種方法,可以事先檢測事件的不可編輯行爲。我知道這是可能的,因爲我已經看到其他日曆應用程序正確實施。

回答

8

好吧,看起來好像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 
} 
... 
+0

我也經歷了文檔,這似乎是唯一的解決方案。 :-( – 2011-01-03 20:13:00

+1

多年後,我們仍然有這個問題。例如(使用Exchange日曆),在iOS 6上設置標題似乎不起作用(意思是顯示爲已更改),但更改日期的工作原理(日期保持不變)。 – 2015-01-14 11:19:28

7

我還沒有使用Event Kit,但從文檔看來,可編輯性似乎是日曆的屬性,而不是事件的屬性。 event.calendar獲取事件日曆,calendar.allowsContentModifications告訴您日曆是隻讀還是讀寫。

+2

感謝您的回答。我已經查看了日曆的財產,但它只適用於生日。另外,我相信這不能在日曆級別上確定,因爲日曆中的一個事件可能是可編輯的,而另一個事件可能是可編輯的。如果一個事件同步到手機上,它是隻讀的,但如果我在本地向同一日曆添加新事件,則它是可編輯的。 – 2010-12-17 23:13:32

1

嘗試在顯示視圖之前,允許EKEventViewController的屬性。

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*/ 
} 
0

我認爲加上這一類方法EKEvent手柄所有事件不可編輯的情況:

- (BOOL)isReadOnly { 
    if (self.calendar.allowsContentModifications == NO) return YES; 
    if (self.organizer && [self.organizer isCurrentUser] == NO) return YES; 
    return NO; 
} 
相關問題