Установить цвет фона / изображение для EKEventEditViewController - PullRequest
5 голосов
/ 13 октября 2011

Ниже приведен мой код для добавления события календаря.Я хочу отправить фоновое изображение для 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 Ответ

12 голосов
/ 01 января 2012

Этот на какое-то время сводил меня с ума, но я наконец понял.

Хитрость заключается в том, чтобы каким-то образом получить доступ к табличному представлению внутри 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, но я не использую ничего недокументированного, поэтому не вижу, что может вызвать проблему.

Наслаждайтесь!

...