Question

First, I apologize for asking another delegation question. I've read many and can't find any that deal with passing something complex...

Here's what I am doing... In my app, I have a ViewController: CollisionViewController where I want to let the user select two vehicles that are involved in a collision. All the vehicles are stored using CoreData and presented modally in SelectVehicleViewController. SelectVehicleViewController lists all the vehicles using a UICollectionView. In CollisionViewController, I have properties for Vehicle1 and Vehicle2 which are of a custom class that describes the properties of a vehicle.

In the CollisionViewController, I am using a UIButton to let the user first select Vehicle1, then Vehicle2 from SelectVehicleViewController presented modally.

I am using seques to determine which button was pressed before presenting the modal SelectVehicleViewController.

How do I setup a protocol that allows the user to pass the selected vehicle from the modal view to the correct vehicle object in the CollisionViewController?

Was it helpful?

Solution

collisionViewController should conform your protocol.

collisionViewController.h

#import "SelectVehicleViewController.h"
@interface ContactViewController : UIViewController <SelectVehicleDelegate>

collisionViewController.m

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqual:@"segueName"]) {
        SelectVehicleViewController* VC = segue.destinationViewController;
        VC.delegate = self;
        //here you should probably send if you will select the vehicule 1 or 2
    }
}

- (void)ViewController:(UIViewController *)sender
         didUpdateData:(NSString *)value {
    //do what you need with new data
    //here you should have info if it is for vehicle 1 or 2
}

SelectVehicleViewController.h

@protocol SelectVehicleDelegate;

@interface SelectVehicleViewController : UIViewController

@property (nonatomic, assign) id <SelectVehicleDelegate> delegate;

@end

@protocol SelectVehicleDelegate <NSObject>

- (void)ViewController:(UIViewController *)sender
             didUpdateData:(NSString *)value;      //adapte according to what you should send back

@end

SelectVehicleViewController.m

//somewhere in a button click or....
[self.delegate ViewController:self didUpdateData:@"new value"];
  //in this function you should have info if it is for vehicle 1 or 2
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top