Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does one access a super's view controller?

I have a problem and I will try to explain the issue:

  1. I have one main UIViewController (Whole screen)
  2. I have one secondary UIViewController (setbounds)
  3. I added my secondary view to my mainView using this:

    [mainController.view addSubview:secondaryController.view];   
    
  4. I created a third controller: modalController, I added it to my secondary controller like this:

    [secondaryController presentModalViewController:modalController animated:YES];
    
  5. I make calculus based on some events inside of my modelController.

  6. I am able to send messages from my modalController to my secondaryController using:

    [[self parentViewController]  performSelector : @selector(myMethodInSecondaryController:) withObject : myObject afterDelay : .5];
    

    NOTE: "self" corresponds to the modalController

  7. I need to pass "myObject" to my mainController, but i cant make reference to my mainController from the secondaryController. I tried this:

    [[self parentViewController] performSelector : @selector(myMethodInMainController:) withObject:myObject afterDelay : .5];
    

    NOTE: "self" corresponds to the secondaryController

    but it doesn't work, i have access to my mainController's view using : self.view.superview

    NOTE: "self" is my secondaryController

but no to its controller.

like image 645
Alejandra Avatar asked Jun 23 '09 17:06

Alejandra


People also ask

How do I get a view controller?

If you need to find the view controller that is responsible for a particular view, the easiest thing to do is walk the responder chain. This chain is built into all iOS apps, and lets you walk from one view up to its parent view, its grandparent view, and so on, until it reaches a view controller.

What is a UIViewController?

The UIViewController class defines the shared behavior that's common to all view controllers. You rarely create instances of the UIViewController class directly. Instead, you subclass UIViewController and add the methods and properties needed to manage the view controller's view hierarchy.


1 Answers

In your secondary controller, try

id mainViewController = [self.view.superview nextResponder];

and check if this is the view controller you're looking for.

Apple's documentation of -[UIResponder nextResponder]:

UIView implements this method by returning the UIViewController object that manages it (if it has one) or its superview (if it doesn’t)

like image 144
Nikolai Ruhe Avatar answered Oct 04 '22 18:10

Nikolai Ruhe