我是iOS世界的新手,所以请忽略显而易见的。
我将 viewController(HelpViewController) 推到另一个 viewController(MainViewController) 之上。当 HelpViewController 中发生特定操作时,我想更新 MainViewController 中的变量。我知道为此我需要使用委托。这是我的代表标题...
@protocol ViewControllerDelegate <NSObject>
@required
- (void) switchToggled:(BOOL)status;
@end
// Protocol Definition ends here
@interface ViewDelegate : NSObject
{
// Delegate to respond back
id <ViewControllerDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)sendMessage:(BOOL)status; // Instance method
@end
和实施...
@implementation ViewDelegate
@synthesize delegate;
-(id)init {
self = [super init];
return self;
}
-(void)sendMessage:(BOOL)status
{
[delegate switchToggled:status];
}
- (void)dealloc
{
[super dealloc];
}
@end
所以现在如果我想实现协议 ViewControllerDelegate 我需要在 MainViewController 中指定,我这样做如下 -
MainViewController <ViewControllerDelegate>
和
#pragma mark - ViewControllerDelegate delegate
-(void)switchToggled:(BOOL)status{
NSLog(@"Switch Toggled(%d) Message passed to MainViewController",status);
}
我的问题是如何指定对象,委托属性需要指向哪个,以便它可以返回到 MainViewController 的“switchToggled”。
我做的一种方法是在 HelpViewController 中拥有如下属性 -
MainViewController.m
HelpViewController *helpVC = [[HelpViewController alloc] init];
helpVC.mainView = self;
[self.navigationController pushViewController:helpVC animated:YES];
[helpVC release];
HelpViewController.h
@property (nonatomic) MainViewController *mainView;
HelpViewController.m
@synthesize mainView;
ViewDelegate *myDelegate = [[ViewDelegate alloc] init];
// assign delegate
myDelegate.delegate = mainView;
[myDelegate sendMessage];
[myDelegate release];
这是正确的实施方式还是有更好的方式来实现这一点,或者我完全错了。
谢谢