jcrowson
jcrowson

Reputation: 4290

Show or dismiss a specific ViewController after performing an action

I want to show a specific ViewController (or dismiss) a View after performing an IBAction in my iPhone App. I've tried

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];

However this does not appear to do anything once the action has been performed.

A bit more information:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    if (selectedCell.tag == 1)
    {

        UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                      initWithTitle:@"Are you sure you want to delete this project?"
        delegate:self cancelButtonTitle:@"No" destructiveButtonTitle:@"Yes, I’m Sure" otherButtonTitles:nil];
        [actionSheet showInView:self.view];


    }

}

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != [actionSheet cancelButtonIndex])
    {

        [self.tableView beginUpdates]; // Avoid  NSInternalInconsistencyException

        // Delete the project object that was swiped
        Project *projectToDelete = self.project;
        NSLog(@"Deleting (%@)", projectToDelete.name);
        [self.managedObjectContext deleteObject:projectToDelete];
        [self.managedObjectContext save:nil];

    }
}

I want the current view to disappear when a user presses the Yes button on the actionsheet.

Upvotes: 0

Views: 2860

Answers (3)

jcrowson
jcrowson

Reputation: 4290

I needed to go all the way back to the first (or, root) view in my navigation stack.

All I need to do was use this method:

[controller.navigationController popToRootViewControllerAnimated:YES];

Upvotes: 1

fabregas88
fabregas88

Reputation: 1138

Another way to show and dismiss a view controller is with pushViewController and popViewController.

To show a viewController:

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; // Uses a horizontal slide transition. Has no effect if the view controller is already in the stack.

And to dismiss:

-(UIViewController *)popViewControllerAnimated:(BOOL)animated; // Returns the popped controller.

Upvotes: 0

Alladinian
Alladinian

Reputation: 35686

// Assume we are inside a UIViewController (or a subclass)

DestinationController *destinationController = [[DestinationController alloc] init];
[self presentModalViewController:destinationController animated:YES];

...

// Assume we are now in destination controller

// Dismiss
[self dismissModalViewControllerAnimated:YES];

Upvotes: 1

Related Questions