如何从被调用的ViewController修改发送方ViewController?

时间:2012-12-31 15:01:25

标签: objective-c ios cocoa-touch uiviewcontroller

我有一个从Storyboard segue调用的登录视图控制器;当用户正确登录时,我需要关闭当前的ViewController,返回调用者ViewController并隐藏登录按钮。

如何引用发件人ViewController来隐藏按钮?我是否必须将“root”ViewController的实例传递给登录,还是有另一种方式?

2 个答案:

答案 0 :(得分:1)

你应该使用委托。用另一个代表的按钮创建VC。登录成功后,您将关闭VC并调用委托方法来隐藏按钮。

答案 1 :(得分:1)

使用委托。

为您的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