Ich habe das Protokoll in Customer.h Datei definiert, die unten gezeigt wird:Passing Werte zwischen Master- und Detail in UISplitViewController Storyboards Mit
@class Customer;
@protocol CustomerDelegate <NSObject>
-(void) didSelectCustomer:(Customer *) customer;
@end
@interface Customer : NSObject
{
}
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *occupation;
@end
Die MasterViewController (linke Seite) ruft die didSelectCustomer Verfahren wie unten gezeigt:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]];
[self.delegate didSelectCustomer:selectedCustomer];
}
Jetzt muss ich den DetailViewController (rechte Seite) etwas tun. Der DetailViewController entspricht dem CustomerDelegate-Protokoll.
@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate>
{
}
-(void) didSelectCustomer:(Customer *)customer
{
NSLog(@"sssdasdasdasd");
}
Die didSelectCustomer-Methode wird nie aufgerufen. Ich denke, dass ich den masterViewController.delegate = selbst einstellen muss, aber ich bin nicht sicher, wo man dieses Ding aufstellt.
UPDATE 1:
Ich fügte hinzu, die Instanz von MasterViewController im Inneren des DetailViewController aber es hat nicht funktioniert:
- (void)viewDidLoad
{
[super viewDidLoad];
MasterViewController *master = [[MasterViewController alloc] init];
master.delegate = self;
}
LÖSUNG:
In AppDelegate:
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;
}
Haben Sie das Problem behoben? Das frisst mein Gehirn. Bitte lassen Sie mich wissen, wenn Sie den Fix gefunden haben? – GenieWanted