EKCalendarВыберите новый календарь

Можно ли показать возможность добавления новых календарей в EKCalendarChooser так же, как приложение iPhone Calendar по умолчанию показывает + в верхнем левом углу и позволяет вам определять свои календари?


person DenTheMan    schedule 12.03.2012    source источник


Ответы (2)


Я искал одно и то же готовое решение почти день, и пока безуспешно.

Хорошо, однако, что вы можете позвонить

[yourEKCalendarChooserInstance setEditing:YES];

И он покажет вам строку «Добавить календарь».

Но плохо то, что при клике/выборе ничего не происходит. Это пока все, что я узнал

ОБНОВИТЬ:

этот код работал у меня (пока тестировался только на симуляторе):

EKEventStore *store = [[[EKEventStore alloc] init] autorelease];
EKCalendarChooser *chooser = [[EKCalendarChooser alloc] initWithStyle:EKCalendarChooserSelectionStyleSingle displayStyle:EKCalendarChooserDisplayWritableCalendarsOnly eventStore:store];
[chooser setEditing:YES];
[chooser setShowsDoneButton:YES];
[chooser setShowsCancelButton:YES];
UINavigationController *modalController = [[UINavigationController alloc] initWithRootViewController:chooser];
[self presentViewController:modalController animated:YES completion:nil];

Кроме того, конечно, вам нужно будет предоставить делегат для кнопок «Готово/Отмена».

person Community    schedule 04.07.2012
comment
Я не согласен с тем, что это сообщение помечено как ответ. Это не дает решения. На самом деле кнопки Done и Cancel даже не появляются, когда EKCalendarChooser находится в режиме редактирования. Единственный способ добиться этого — загрузить два отдельных экземпляра EKCalendarChooser, один для редактирования и один для выбора. - person KaosXIV; 27.11.2013

После долгих проб и ошибок я наконец получил это:

var calendarChooser: EKCalendarChooser!
var navController: UINavigationController!

func setup () {
    calendarChooser =  EKCalendarChooser(
        selectionStyle: EKCalendarChooserSelectionStyleMultiple,
        displayStyle: EKCalendarChooserDisplayAllCalendars,
        entityType: EKEntityTypeEvent,
        eventStore: zeitplanController.cache.eventStore)
    // DON'T DO THE FOLLOWING:
    // calendarChooser.editing = false
    navController = UINavigationController(rootViewController: calendarChooser)
    calendarChooser.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Edit, target: self, action: "startEditing")
}

func startEdit () {
    calendarChooser.editing = true
    calendarChooser.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "endEdit") }

func endEdit () {
    calendarChooser.editing = false
    calendarChooser.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Edit, target: self, action: "startEdit")
}

Это, помещенное в UIPopoverController, показывает стандартный диалог выбора календаря, включая функции редактирования, как в исходном приложении календаря.

@Apple: пожалуйста, сделайте нам одолжение и обновите документацию, чтобы сделать нашу жизнь проще.

person heiko    schedule 01.08.2014
comment
Странный. Методы EKCalendarChooserDelegate вызываются, но selectedCalendars пусты. Похоже, вы пытаетесь продублировать при настройке этих кнопок то, что в документах говорится, что метод делегата уже делает. Я что-то упускаю? - person Victor Engel; 14.10.2017