Passando valores entre mestre e detalhes no UISplitViewController usando Storyboards
Eu defini o protocolo no arquivo Customer.h que é mostrado abaixo:
<code>@class Customer; @protocol CustomerDelegate <NSObject> -(void) didSelectCustomer:(Customer *) customer; @end @interface Customer : NSObject { } @property (nonatomic,copy) NSString *name; @property (nonatomic,copy) NSString *occupation; @end </code>
O MasterViewController (lado esquerdo) invoca o método didSelectCustomer como mostrado abaixo:
<code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; [self.delegate didSelectCustomer:selectedCustomer]; } </code>
Agora, preciso informar o DetailViewController (lado direito) para fazer alguma coisa. O DetailViewController está em conformidade com o protocolo CustomerDelegate.
<code>@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> { } -(void) didSelectCustomer:(Customer *)customer { NSLog(@"sssdasdasdasd"); } </code>
O método didSelectCustomer nunca é chamado. Eu acho que preciso definir o masterViewController.delegate = self, mas não tenho certeza de onde definir isso.
ATUALIZAÇÃO 1:
Eu adicionei a instância do MasterViewController dentro do DetailViewController, mas não funcionou:
<code>- (void)viewDidLoad { [super viewDidLoad]; MasterViewController *master = [[MasterViewController alloc] init]; master.delegate = self; } </code>
SOLUÇÃO:
No AppDelegate:
<code> else { UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController; splitViewController.delegate = [splitViewController.viewControllers lastObject]; UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; // splitViewController.delegate = (id)navigationController.topViewController; DetailViewController *detail =(DetailViewController *) [splitViewController.viewControllers lastObject]; UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController; master.delegate = detail; } </code>