I'm encountering some problems in integrating segue and protocols while implementing a selection list.
In my selection list .h I have:
#import <UIKit/UIKit.h>
@protocol SelectionListViewControllerDelegate <NSObject>
@required
- (void)rowChosen:(NSInteger)row;
@end
@interface SelectColor : UITableViewController <NSFetchedResultsControllerDelegate>
-(IBAction)saveSelectedColor;
@property (nonatomic, strong) id <SelectionListViewControllerDelegate> delegate;
@end
In my selection list .m I have:
@implementation SelectColori
@synthesize delegate;
//this method is called from a button on ui
-(IBAction)saveSelectedColore
{
[self.delegate rowChosen:[lastIndexPath row]];
[self.navigationController popViewControllerAnimated:YES];
}
I would like to access to this selection list view by performing a segue from another table view:
@implementation TableList
...
- (void)selectNewColor
{
SelectColor *selectController = [[SelectColor alloc] init];
selectController.delegate = (id)self;
[self.navigationController pushViewController:selectController animated:YES];
//execute segue programmatically
//[self performSegueWithIdentifier: @"SelectColorSegue" sender: self];
}
- (void)rowChosen:(NSInteger)row
{
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error Title" message:@"Error Text" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
If I navigate to the selection list using:
[self.navigationController pushViewController:selectController animated:YES];
the alert is displayed. If I instead use:
[self performSegueWithIdentifier: @"SelectColorSegue" sender: self];
no alert is displayed, because, I think, I don't pass to the destination selection list the selectController. Any ideas to solve this issue please?
When using Segue to pass data to the destinationViewController you need to use the method
from the Apple Docs