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?
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