我有一个从 Storyboard segue 调用的登录视图控制器。当用户正确登录后,我需要关闭当前的 ViewController,返回调用方 ViewController 并隐藏登录按钮。
如何引用发送方 ViewController 来隐藏按钮?我必须将root
ViewController 的实例传递给登录名还是有其他方法?
我有一个从 Storyboard segue 调用的登录视图控制器。当用户正确登录后,我需要关闭当前的 ViewController,返回调用方 ViewController 并隐藏登录按钮。
如何引用发送方 ViewController 来隐藏按钮?我必须将root
ViewController 的实例传递给登录名还是有其他方法?
您应该使用委托。使带有按钮的 VC 成为其他人的代表。登录成功后,关闭 VC 并调用委托方法隐藏按钮。
使用委托。
为您的 DetaliViewControler 创建一个协议,例如
@protocol DetailViewControllerDelegate <NSObject>
-(void)successFullyLoggedInOnController:(DetailViewController *) controller;
@end
向 DetailViewController 的界面添加委托声明,例如
@property (weak) id<DetailViewControllerDelegate> delegate;
使 MasterViewController 符合协议。
-(void)successFullyLoggedInOnController:(DetailViewController *) controller
{
[self.loginButton setHidden:YES];
}
现在就在 MasterViewController 显示 DetailViewController 之前,执行类似的操作
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"DetailViewSegue"]) {
DetailViewController *vc = segue.destinationViewController;
vc.delegate = self;
}
}
在 DetailViewController 中,一旦输入凭据并验证调用
[self.delegate successFullyLoggedInOnController:self];
并关闭 DetailViewController