mpurland / UIViewController-BlockSegue

Category which allows to use a block to prepare segue instead of ugly -prepareForSegue method

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cocoa Pods Version Cocoa Pods Platform Build Status

Are you tired to write an ugly and big -prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender: method like that?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"segue1"]) {
        UIViewController *destination = segue.destinationViewController;
        destination.view.backgroundColor = [UIColor redColor];
    } else if ([segue.identifier isEqualToString:@"segue2"]) {
        UIViewController *destination = segue.destinationViewController;
        destination.view.backgroundColor = [UIColor blueColor];
    } else if ([segue.identifier isEqualToString:@"segue3"]) {
        UIViewController *destination = segue.destinationViewController;
        destination.view.backgroundColor = [UIColor greenColor];
    }
    ...
}

Check UIViewController+BlockSegue and enjoy defining a block which will be executed to prepare segue in the same place which you call to performSegue.

IMPORTANT: if you override -prepareForSegue:sender: method, BlockSegue won't be performed in these UIViewController.

Install

Use UIViewController+BlockSegue category it's really easy, you only need to drop UIViewController+BlockSegue folder to your project, or if you are a CocoaPods-lover, you can include this line in your Podfile as usual:

pod 'UIViewController+BlockSegue'

After that, you need to import UIViewController+BlockSegue.h on each view controller where you want to configure segues.

Use

UIViewController+BlockSegue can be used in two ways: inline (when you performSegue programatically) or independently (in other line).

Inline

Perform segue and configure the block which is executed in the same sentence.

[self performSegueWithIdentifier:@"segueIdentifier" sender:nil withBlock:^(id sender, id destinationVC, UIStoryboardSegue *segue) {
    NSLog(@"Segue configured inline");
    destinationVC.user = tmpUser;
}];

Independently

Configure segue block independently of his execution, this way could be called on viewDidLoad for example, and it's run with both the call performSegueWithIdentifier:sender: method and storyboard segue perform.

[self configureSegue:@"segueIdentifier" withBlock:^(id sender, id destinationVC, UIStoryboardSegue *segue); {
    NSLog(@"I'm a block fired with the segue!");
}];

Testing

I added some tests as personal exercise, but if you want run them, exec script (it uses xcpretty by supermarin):

./run_tests.sh

Acknowledges

Author

License

UIViewController+BlockSegue is available under the MIT license. See the LICENSE file for more info.

About

Category which allows to use a block to prepare segue instead of ugly -prepareForSegue method

License:MIT License


Languages

Language:Objective-C 92.3%Language:Ruby 6.6%Language:Shell 1.1%