Использование календаря Kal из существующего табличного представления и popToRootViewController не работает

Я пытаюсь использовать календарь Kal в своем проекте. Вот что я понимаю до сих пор:

  • Любой контроллер представления, который вызывает Kal, должен реализовать метод UITableViewDelegate «didSelectRowAtPath».

Проблема:

  • Мой контроллер представления, который вызывает Kal уже, имеет существующее табличное представление (одна из ячеек будет вызывать Kal)

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

ScheduleViewController *svc = [[ScheduleViewController alloc] init];
[svc setTitle:@"Schedule"];
[self.navigationController pushViewController:svc animated:YES];

Из viewDidLoad ScheduleViewController я загружаю фактический календарь Kal:

KalViewController *kal = [[KalViewController alloc] init];
[kal setDelegate:self];
[kal setTitle:@"Schedule"];
[self.navigationController pushViewController:kal animated:NO];

Итак, как только я это сделаю, я смогу вывести календарь. Тем не менее, я не могу вернуться в главное меню с помощью кнопки «Назад». Я создал кнопку «Назад» в ScheduleViewController:

[kal.navigationItem
setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                     style:UIBarButtonItemStyleBordered
                                                    target:self
                                                    action:@selector(test)]];

Я поместил это в несколько разных мест (viewDidLoad, viewWillAppear) и не могу заставить его работать. Когда я нажимаю «Назад», он все равно переходит к ScheduleViewController, а не обратно. "тест" никогда не вызывается. Я пробовал popToRootViewController, [[self.presentingViewController PresentViewController] rejectViewController] и некоторые другие. Просто не хочет работать.

  • Это лучший способ использовать Kal?
  • Как я могу использовать popToRootViewController (пропуская ScheduleViewController) с помощью этого метода?

Спасибо! Это мой первый пост, поэтому, пожалуйста, дайте мне знать, если я могу что-то сделать, чтобы вопрос был менее запутанным.


person Kevin Chang    schedule 04.11.2012    source источник


Ответы (1)


Ну, наконец, понял, я думаю. В итоге я удалил промежуточный контроллер представления. Я думаю, что просто не понимал, что происходит раньше... Сейчас я сделал следующее:

  • вместо того, чтобы мой контроллер основного представления (с существующим табличным представлением) был делегатом, я сделал KalDataSource также UITableViewDelegate. Таким образом, мой DataSource обрабатывает как заполнение календаря, так и выбор события.

  • добавлен идентификатор источника данных, как в ivar, в контроллере основного представления

  • изменил метод "didSelectRowAtPath" на:

    dataSource = [[EventsDataSource alloc] init];

    KalViewController *kal = [[KalViewController alloc] init]; [кал setDelegate: источник данных]; [кал setDataSource: источник данных]; [kal setTitle:@"Расписание"]; [self.navigationController pushViewController: kal, анимированный: YES];

Теперь все похоже в порядке.

person Kevin Chang    schedule 04.11.2012