How to get the Finish or Back button in the EKEventViewController if there is no navigation bar?

I have a list of calendar events in my iOS application that should be open in EKEventViewController when clicked. Here is my code:

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

The type of events is correctly displayed at the bottom of the screen, but I have no way to return to the list of events!

I use a navigation controller (but not a navigation bar!), So adding this code allowed me to return to the list:

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

But this solution is not very elegant, because when I click the "Back" button in the event view, the navigation bar is not deleted (it is displayed on top of my list of events) before the entire view of the events leaves the screen.

? - , ( ), .

: :

- (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];
}
+4
2

, ! , ? , .

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

-

+1

, / , .

a) :

  • EKEventViewController navigationItem UINavigationController. !

b) :

  • . , ) .

, :

viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
                              style:UIBarButtonItemStyleBordered
                             target:self
                             action:@selector(dismissController:)];

dismissController: .

+1

Source: https://habr.com/ru/post/1540852/


All Articles