当没有导航栏时,如何在 EKEventeditViewController 中获得“完成”或“后退”按钮?

2024-03-15

我的 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];
}

看来你根本不需要隐藏导航栏!您能详细解释一下为什么需要隐藏或显示导航栏吗?这将是隐藏或显示模型视图的简单解决方案。

// EKEventListVC.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
            EKEventViewController *pms = [EKEventViewController new];
            UINavigationController *nav = [[UINavigationController alloc]
                                           initWithRootViewController:pms];
            [self presentViewController:nav animated:YES completion:nil];
}

// EKEventViewController.m

- (void)addRightButton
{
    UIButton *rightButton = // make your button
    [rightButton addTarget:self action:@selector(rightBtnActionDone:) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    [self.navigationItem setRightBarButtonItem:barButtonItem];
}

//

- (void)rightBtnActionDone:(UIButton *)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

// 为 EKEventKitUI 编辑

-(void)eventEditViewController:(EKEventEditViewController *)controller
         didCompleteWithAction:(EKEventEditViewAction)action {

    switch (action) {
       case EKEventEditViewActionCanceled:
           // User tapped "cancel"
           break;
       case EKEventEditViewActionSaved:
           // User tapped "save"
           break;
       case EKEventEditViewActionDeleted:
           // User tapped "delete"
           break;
       default:
           break;
    }

    [self dismissModalViewControllerAnimated:YES];
}

代码示例 https://github.com/neilang/Countdown -

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当没有导航栏时,如何在 EKEventeditViewController 中获得“完成”或“后退”按钮? 的相关文章

随机推荐