Search code examples
objective-cios7uiviewuiviewcontrolleruipageviewcontroller

Remove subview and send control back


I am invoking "HelpviewController" from UIViewController using following code, which is working fine.

self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"InnerHelpPageViewController"];
            self.pageViewController.dataSource = self;

            InnerHelpViewController *startingViewController = [self viewControllerAtIndex:0];
            NSArray *viewControllers = @[startingViewController];
            [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

            // Change the size of page view controller
            self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30);

            [self addChildViewController:_pageViewController];
            [self.view addSubview:_pageViewController.view];
            [self.pageViewController didMoveToParentViewController:self];

Inside my new controller InnerHelpViewController I have done button which should remove this newly added view and send control back to initiated page.

- (IBAction)unwindToMenuFromInnerHelp:(id)sender {
    [self.view removeFromSuperview];
}

This call removing the newly added view, but the problem is "MenuController" is frozen. I couldn't do any clicks on it. Any help?

To explain flow--> I have menu screen where one button with name "help" --> When user clicks on this help button first snippet of code in this question executes and shows HelpViewController-->Once done with help, user clicks "Done" button--> Which should close the HelpViewController and move to "menu" screen.


Solution

  • Implement protocol method in InnerHelpViewController.h file class

    @protocol InnerHelpViewControllerDelegate
    
      -(void)removeCustomView;
    @end
    
    @interface InnerHelpViewController : UIViewController{
    
    }
    @property(nonatomic, weak) id<InnerHelpViewControllerDelegate> delegate.
    

    In InnerHelpViewController.m file

    @synthesize delegate;
    
    - (IBAction)unwindToMenuFromInnerHelp:(id)sender {
        [delegate removeCustomView];
    }
    

    in MenuController .h file Adopt InnerHelpViewControllerDelegate.

    @interface MenuController : UIViewController<InnerHelpViewControllerDelegate>{
    
    }
    

    Now Confirm your delegate in MenuController.m file while helpviewcontroller object creation.

    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"InnerHelpPageViewController"];
                self.pageViewController.dataSource = self;
    
                InnerHelpViewController *startingViewController = [self viewControllerAtIndex:0];
                startingViewController.delegate = self;
                NSArray *viewControllers = @[startingViewController];
                [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
    
                // Change the size of page view controller
                self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30);
    
                [self addChildViewController:_pageViewController];
                [self.view addSubview:_pageViewController.view];
                [self.pageViewController didMoveToParentViewController:self];
    
    //Implement here delegate method
         -(void)removeCustomView{
          [self.pageViewController removeFromSuperview]
        }