5

以下是我添加日历事件的代码。我想为 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]; 
4

1 回答 1

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,但我没有使用任何未记录的内容,因此我看不出会导致问题的原因。

享受!

于 2012-01-01T09:34:50.330 回答