Передача значений между мастером и деталями в UISplitViewController с использованием раскадровок
Я определил протокол в файле Customer.h, который показан ниже:
<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>
MasterViewController (левая сторона) вызывает метод didSelectCustomer, как показано ниже:
<code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; [self.delegate didSelectCustomer:selectedCustomer]; } </code>
Теперь мне нужно сказать DetailViewController (справа) что-то сделать. DetailViewController соответствует протоколу CustomerDelegate.
<code>@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> { } -(void) didSelectCustomer:(Customer *)customer { NSLog(@"sssdasdasdasd"); } </code>
Метод didSelectCustomer никогда не вызывается. Я думаю, что мне нужно установить masterViewController.delegate = self, но я не уверен, где настроить эту вещь.
UPDATE 1:
Я добавил экземпляр MasterViewController внутри DetailViewController, но он не работал:
<code>- (void)viewDidLoad { [super viewDidLoad]; MasterViewController *master = [[MasterViewController alloc] init]; master.delegate = self; } </code>
SOLUTION:
В 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>