Übergeben von Werten zwischen Master und Detail in UISplitViewController mithilfe von Storyboards
Ich habe das Protokoll in der Datei Customer.h definiert, die unten gezeigt wird:
<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>
Der MasterViewController (linke Seite) ruft die didSelectCustomer-Methode wie folgt auf:
<code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; [self.delegate didSelectCustomer:selectedCustomer]; } </code>
Jetzt muss ich den DetailViewController (rechts) anweisen, etwas zu tun. Der DetailViewController entspricht dem CustomerDelegate-Protokoll.
<code>@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> { } -(void) didSelectCustomer:(Customer *)customer { NSLog(@"sssdasdasdasd"); } </code>
Die didSelectCustomer-Methode wird nie aufgerufen. Ich denke, ich muss den masterViewController.delegate = self setzen, aber ich bin nicht sicher, wo ich das Ding einrichten soll.
UPDATE 1:
Ich habe die Instanz von MasterViewController im DetailViewController hinzugefügt, aber es hat nicht funktioniert:
<code>- (void)viewDidLoad { [super viewDidLoad]; MasterViewController *master = [[MasterViewController alloc] init]; master.delegate = self; } </code>
LÖSUNG:
In 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>