2011-10-13 170 views
5

以下是我添加日历事件的代码。我想为EKEventEditViewController发送一个背景图片。我发现这个代码为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]; 

回答

12

这一个让我疯狂了一会儿,但我终于明白了。

诀窍就是以某种方式获得访问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,但我没有使用任何未公开的文档,因此我没有看到会导致问题的原因。

享受!

+0

非常感谢。我会尝试一下,让你知道.. –

+1

非常感谢,它工作得很好..如果我点击标题/位置里面仍然看到旧的默认屏幕。你能帮我改变那个背景吗? –