2011-10-13 18 views
5

El siguiente es mi código para agregar un evento de calendario. Quiero enviar una imagen de fondo para EKEventEditViewController. He encontrado este códigoEstablecer color/imagen de fondo para EKEventEditViewController

UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0]; 

Utilizando este código yo era capaz de imagen de fondo para establecer EKEventViewController pero no su trabajo para EKEventEditViewController. Cualquier ayuda es muy apreciada. Gracias por adelantado.

 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]; 

Respuesta

12

Éste me llevó frutos secos por un tiempo, pero finalmente lo he descubierto.

El truco es conseguir de alguna manera el acceso a la vista de tabla dentro de la EKEventEditViewController, y parece que hay una sola manera (documentado) para hacer eso:

En primer lugar, establecer el controlador de vista presentando el EKEventEditViewController (o lo que sea quieres ser responsable de la personalización) como UINavigationControllerDelegate:

@interface YourViewController : UIViewController <UINavigationControllerDelegate> 

en segundo lugar, establecer el controlador de vista de ser el EKEventEditViewController 's delegado:

EKEventEditViewController *eventEditViewController = [[EKEventEditViewController alloc] init]; 
eventEditViewController.delegate = yourViewController; // Probably self 

En tercer lugar, poner en práctica el método siguiente en el delegado:

- (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; 
    } 
} 

En este ejemplo se va a cambiar el EKEventEditViewController 's vista de tabla de fondo en azul, pero ahora que tiene acceso al controlador de navegación actual y la vista de tabla en el interior ¡Puedes hacer lo que quieras!

Nota: Todavía no he enviado este código a Apple, pero no estoy utilizando nada no documentado, por lo que no veo qué podría causar un problema.

¡Disfrútalo!

+0

Muchas gracias ... Lo intentaré y le dejaré saber .. –

+1

Muchas gracias está funcionando muy bien .. Sin embargo, si hago clic en Título/Ubicación dentro todavía veo la antigua pantalla predeterminada. ¿Puedes ayudarme a cambiar ese fondo? –

Cuestiones relacionadas