#iphone #calendar #ekeventkit
#iPhone #Календарь #ekeventkit
Вопрос:
Ниже приведен мой код для добавления события календаря. Я хочу отправить фоновое изображение для EKEventEditViewController. Я нашел этот код
UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0];
Используя этот код, я смог установить фоновое изображение для EKEventViewController, но оно не работает для EKEventEditViewController. Любая помощь приветствуется. Заранее спасибо.
EKEventEditViewController *editController = [[EKEventEditViewController alloc] init];
// UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0];
// [eventTableView setHidden:YES];
// [eventTableView setBackgroundColor:[UIColor redColor]];
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: editController.viewControllers];
NSLog(@"%i", [allViewControllers count]);
UITableView *eventTableView = [[[allViewControllers objectAtIndex:0] subviews] objectAtIndex:0];
// UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0];
// eventTableView.backgroundColor = [UIColor redColor];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"honeycomb.png"]];
eventTableView.backgroundColor = background;
// [background release];
editController.event = [eventsList objectAtIndex:indexPath.row];
editController.eventStore = self.eventStore;
editController.editViewDelegate = self;
itsSelectedReminder = indexPath.row;
isReminderDeleted = TRUE;
[editController.navigationBar setTintColor:[UIColor colorWithRed:67/255.0 green:114/255.0 blue:18/255.0 alpha:1]];
[self presentModalViewController:editController animated:YES];
[editController release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Ответ №1:
Это какое-то время сводило меня с ума, но я, наконец, понял это.
Хитрость заключается в том, чтобы каким-то образом получить доступ к представлению таблицы внутри EKEventEditViewController, и, похоже, есть только один (документированный) способ сделать это:
Сначала установите контроллер представления EKEventEditViewController
, представляющий (или что бы вы ни хотели, чтобы отвечать за настройку) как UINavigationControllerDelegate
:
@interface YourViewController : UIViewController <UINavigationControllerDelegate>
Во-вторых, установите ваш контроллер представления EKEventEditViewController
в качестве делегата:
EKEventEditViewController *eventEditViewController = [[EKEventEditViewController alloc] init];
eventEditViewController.delegate = yourViewController; // Probably self
В-третьих, реализуйте следующий метод в делегате:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[UITableViewController class]]) {
((UITableViewController *)viewController).tableView.backgroundColor = [UIColor blueColor];
((UITableViewController *)viewController).tableView.backgroundView = nil;
}
}
В этом примере EKEventEditViewController
фон табличного представления изменится на синий, но теперь, когда у вас есть доступ к фактическому контроллеру навигации и табличному представлению внутри, вы можете делать все, что захотите!
Примечание: я еще не отправил этот код в Apple, но я не использую ничего недокументированного, поэтому я не вижу, что может вызвать проблему.
Наслаждайтесь!
Комментарии:
1. Большое спасибо, он отлично работает.. Однако, если я нажму Заголовок / местоположение внутри, я все равно увижу старый экран по умолчанию. Можете ли вы помочь мне изменить этот фон..