这听起来像是一个使用 Delegates 的好地方。在您的 RegisterViewController.h 中定义这样的协议
@protocol RegisterViewDelegate <NSObject>
- (void)tellRegisterDelegateSomething:(NSObject*)something;
@end
然后在你的班级上保持一个指向你的代表的指针
@interface RegisterViewController : UIViewController
@property (weak, nonatomic) id <RegisterViewDelegate> delegate;
@end
现在告诉呈现的视图控制器他们实现了你刚刚创建的新协议。这是在呈现该视图的其他视图控制器的 .h 文件中完成的。
在 LoginViewController.h
@interface LoginViewController : UIViewController <RegisterViewDelegate>
@end
在 DashboardViewController.h
@interface DashboardViewController : UIViewController <RegisterViewDelegate>
@end
在上述类的.m文件中,实现协议的方法
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
}
现在,当您从这样的任何一个呈现视图控制器执行转场时,您需要分配委托。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"SegueToFbRegister"])
{
RegisterViewController* destination = [segue destinationViewController];
destination.delegate = self;
}
}
现在您可以调用呈现视图控制器(委托)并让它处理您需要像这样发回的任何信息(这将在您的 RegisterViewController.m 中调用)。
if ([self.delegate respondsToSelector:@selector(tellRegisterDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellRegisterDelegateSomething:something];
}
您需要通过两个控制器返回的实例遵循相同的基本模式。
@protocol LoginViewDelegate <NSObject>
- (void)tellLoginDelegateSomething:(NSObject*)something;
@end
然后在你的班级上保持一个指向你的代表的指针
@interface LoginViewController : UIViewController
@property (weak, nonatomic) id <LoginViewDelegate> delegate;
@end
现在告诉仪表板视图控制器它实现了协议。这是在显示此视图的仪表板视图控制器的 .h 文件中完成的。
在 DashboardViewController.h
@interface DashboardViewController : UIViewController <RegisterViewDelegate, LoginViewDelegate>
@end
在 DashboardViewController 的 .m 文件中实现协议的方法
执行 segue 时,请遵循上述在视图控制器上设置委托的模式。现在,当在 LoginViewController 中调用委托方法时,您也在 DashboardViewController 中调用委托。
在 LoginViewController.m
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
if ([self.delegate respondsToSelector:@selector(tellLoginDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellLoginDelegateSomething:something];
}
}
现在你们都已连接,因此您可以通过两个控制器(或仅一个控制器)传回数据并对其进行处理。您将知道您所处的场景,因为在 DashboardViewController 中将根据可见的视图控制器调用不同的委托方法。
希望这可以帮助。