我正在使用NavigationController从应用程序的rootView“推送”viewControllers。
我想使用委托来通信当前加载的视图和rootViewController。我可以使用NSNotificationCenter来做到这一点,但我想尝试一下这种特殊情况下的代表,因为沟通总是一对一的。
在推送的视图中,我在头文件中声明了以下委托协议:
#import <UIKit/UIKit.h>
@protocol AnotherViewControllerDelegate;
@interface AnotherViewController : UIViewController {
id <AnotherViewControllerDelegate> delegate;
}
- (IBAction) doAction;
@property (nonatomic, assign) id delegate;
@end
@protocol AnotherViewControllerDelegate <NSObject>
- (void) doDelegatedAction:(AnotherViewController *)controller;
@end
doAction IBAction连接到视图中的UIButton。在我的实施文件中,我添加了:
#import "AnotherViewController.h"
@implementation AnotherViewController
@synthesize delegate;
- (IBAction) doAction {
NSLog(@"doAction");
[self.delegate doDelegatedAction:self];
}
在我的RootViewController.h中,我将AnotherViewControllerDelegate添加到接口声明中:
@interface RootViewController : UIViewController <AnotherViewControllerDelegate> {...
这个到我的实现文件
- (void) doDelegatedAction:(AnotherViewController *)controller {
NSLog(@"rootviewcontroller->doDelegatedAction");
}
不幸的是,它不起作用。未调用rootViewController中的doDelegatedAction。我怀疑这是因为我推送AnotherViewController的方式:
AnotherViewController *detailViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
我是否应该以任何方式告诉AnotherViewController,在它被推送的那一刻,它的委托将是RootViewController?还是我错过了什么?