Przekazywanie wartości między wzorcem a szczegółem w UISplitViewController Korzystanie z serii ujęć
Zdefiniowałem protokół w pliku Customer.h, który pokazano poniżej:
<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 (po lewej stronie) wywołuje metodę didSelectCustomer, jak pokazano poniżej:
<code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; [self.delegate didSelectCustomer:selectedCustomer]; } </code>
Teraz muszę powiedzieć DetailViewControllerowi (prawa strona), aby coś zrobił. DetailViewController jest zgodny z protokołem CustomerDelegate.
<code>@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> { } -(void) didSelectCustomer:(Customer *)customer { NSLog(@"sssdasdasdasd"); } </code>
Metoda didSelectCustomer nigdy nie jest wywoływana. Myślę, że muszę ustawić masterViewController.delegate = self, ale nie jestem pewien, gdzie ustawić tę rzecz.
AKTUALIZACJA 1:
Dodałem instancję MasterViewController wewnątrz DetailViewController, ale to nie zadziałało:
<code>- (void)viewDidLoad { [super viewDidLoad]; MasterViewController *master = [[MasterViewController alloc] init]; master.delegate = self; } </code>
ROZWIĄZANIE:
W 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>