我的 iOS 应用程序中有一个日历事件列表,单击时将在 EKEventViewController 中打开。这是我的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
EKEventViewController *eventViewController = [EKEventViewController new];
eventViewController.event = [self.events objectAtIndex:[indexPath row]];
[self presentViewController:eventViewController animated:YES completion:nil];
}
事件视图从屏幕底部正确弹出,但我无法返回事件列表!
我正在使用导航控制器(但没有导航栏!),因此添加此代码使我能够返回到列表:
-(void)viewDidAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:YES];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
EKEventViewController *eventViewController = [EKEventViewController new];
eventViewController.event = [self.events objectAtIndex:[indexPath row]];
[self.navigationController setNavigationBarHidden:NO];
[self.navigationController pushViewController:eventViewController animated:YES];
}
但这个解决方案不是很优雅,因为当我在事件视图中按“后退”按钮时,在事件视图完全超出屏幕之前,导航栏不会被删除(它显示在我的事件列表视图的顶部)。
如何解决这个问题?最好的选择是以某种方式在事件视图中获得一个后退按钮,我可以将其与此处的第一个代码一起使用(这样我就可以避免显示导航栏),并且视图可以滑回屏幕底部当按下时。
解决方案:
最终得到以下代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
EKEventViewController *eventViewController = [EKEventViewController new];
eventViewController.event = [self.events objectAtIndex:[indexPath row]];
eventViewController.delegate = self;
UINavigationController *navBar = [[UINavigationController new] initWithRootViewController:eventViewController];
[self presentViewController:navBar animated:YES completion:nil];
}
- (void)eventViewController:(EKEventViewController *)controller didCompleteWithAction:(EKEventViewAction)action
{
[self dismissViewControllerAnimated:YES completion:nil];
}