Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a segue programmatically

I have a common UIViewController that all my UIViewsControllers extend to reuse some common operations.

I want to set up a segue on this "Common" UIViewController so that all the other UIViewControllers inherit.

I am trying to figure out how do I do that programmatically.

I guess that the question could also be how do I set a segue for all my UIViewControllers without going into the story board and do them by hand.

like image 498
Tiago Veloso Avatar asked Mar 12 '12 20:03

Tiago Veloso


1 Answers

I thought I would add another possibility. One of the things you can do is you can connect two scenes in a storyboard using a segue that is not attached to an action, and then programmatically trigger the segue inside your view controller. The way you do this, is that you have to drag from the file's owner icon at the bottom of the storyboard scene that is the segueing scene, and right drag to the destination scene. I'll throw in an image to help explain.

enter image description here

A popup will show for "Manual Segue". I picked Push as the type. Tap on the little square and make sure you're in the attributes inspector. Give it an identifier which you will use to refer to it in code.

enter image description here

Ok, next I'm going to segue using a programmatic bar button item. In viewDidLoad or somewhere else I'll create a button item on the navigation bar with this code:

UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"                                                                     style:UIBarButtonItemStyleDone                                                                    target:self                                                                    action:@selector(buttonizeButtonTap:)]; self.navigationItem.rightBarButtonItems = @[buttonizeButton]; 

Ok, notice that the selector is buttonizeButtonTap:. So write a void method for that button and within that method you will call the segue like this:

-(void)buttonizeButtonTap:(id)sender{     [self performSegueWithIdentifier:@"Associate" sender:sender];     } 

The sender parameter is required to identify the button when prepareForSegue is called. prepareForSegue is the framework method where you will instantiate your scene and pass it whatever values it will need to do its work. Here's what my method looks like:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {     if ([[segue identifier] isEqualToString:@"Associate"])     {         TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];         translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController         translationQuizAssociateVC.contentID = self.contentID;         translationQuizAssociateVC.index = self.index;         translationQuizAssociateVC.content = self.content;     } } 

Ok, just tested it and it works. Hope it helps you.

like image 64
smileBot Avatar answered Sep 20 '22 06:09

smileBot