iPhone: Как определить, можно ли изменить экземпляр EKEvent? - PullRequest
3 голосов
/ 18 декабря 2010

Во время работы с EventKit на iPhone я заметил, что могут существовать некоторые события, которые нельзя изменить. Примеры, с которыми я сталкивался до сих пор, - это дни рождения и события, синхронизированные с CalDAV. При просмотре сведений о событии в стандартном встроенном приложении-календаре на iPhone кнопка «Изменить» в верхнем правом углу не видна в этих случаях, где она будет видна при просмотре «обычных» событий.

Я искал везде, прочитал всю имеющуюся документацию, но я просто не могу найти ничего, что подсказывало бы мне, как обнаружить это поведение! Я могу обнаружить это только потом:

  1. изменить заголовок события
  2. сохранить в хранилище событий
  3. проверить заголовок события, если он не изменился, он не редактируется!

Я ищу способ, которым я мог бы обнаружить нередактируемое поведение события заранее. Я знаю, что это возможно, потому что я видел, как другие приложения календаря правильно это реализовали.

Ответы [ 5 ]

9 голосов
/ 19 декабря 2010

Хорошо, похоже, что SDK не предоставляет мне ничего, что я мог бы использовать, чтобы проверить, доступно ли EKEvent только для чтения.Я создал обходной путь, создав категорию, добавляющую метод isReadOnly ко всем экземплярам EKEvent.

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
}
...
7 голосов
/ 18 декабря 2010

Я еще не работал с Event Kit, но из документации видно, что возможность редактирования - это свойство календаря, а не события.event.calendar возвращает вам календарь события, а calendar.allowsContentModifications сообщает, доступен ли календарь только для чтения или для чтения-записи.

1 голос
/ 11 июля 2012

Да.Это возможно.Код будет выглядеть следующим образом: Попробуйте связать с кодом, зарегистрировав выходные данные объектов, которые я использую, с редактируемыми / нередактируемыми событиями, и вы поймете, как это работает:)

EKEventViewController *controller = [[EKEventViewController alloc] init];
controller.event = myEvent; /*myEvent is of type EKEvent*/          
if(controller.navigationItem.leftBarButtonItem != NULL)
{
    /*Event is Editable, Your code here*/
}
1 голос
/ 23 марта 2011

try позволяет свойствоEEditing EKEventViewController перед отображением представления.

0 голосов
/ 25 ноября 2015

Я думаю, что добавление этого метода категории для EKEvent обрабатывает все случаи, когда события недоступны для редактирования:

- (BOOL)isReadOnly {
    if (self.calendar.allowsContentModifications == NO) return YES;
    if (self.organizer && [self.organizer isCurrentUser] == NO) return YES;
    return NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...