我已经定义这将在下面示于Customer.h文件的协议:传值使用故事板
@class Customer;
@protocol CustomerDelegate <NSObject>
-(void) didSelectCustomer:(Customer *) customer;
@end
@interface Customer : NSObject
{
}
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *occupation;
@end
的MasterViewController(左侧)调用didSelectCustomer方法,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]];
[self.delegate didSelectCustomer:selectedCustomer];
}
现在,我需要告诉DetailViewController(右侧)做一些事情。 DetailViewController符合CustomerDelegate协议。
@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate>
{
}
-(void) didSelectCustomer:(Customer *)customer
{
NSLog(@"sssdasdasdasd");
}
didSelectCustomer方法从不调用。我想我需要设置masterViewController.delegate = self,但我不确定将此设置在哪里。
更新1:
我加MasterViewController的DetailViewController里面的实例,但它没有工作:
- (void)viewDidLoad
{
[super viewDidLoad];
MasterViewController *master = [[MasterViewController alloc] init];
master.delegate = self;
}
SOLUTION:
在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;
}
你是否解决了这个问题?这吃了我的大脑。请让我知道你是否找到了解决办法? – GenieWanted 2013-09-16 13:24:26