【问题标题】:How to modify the sender ViewController from the called ViewController?如何从被调用的 ViewController 中修改发送方 ViewController?
【发布时间】:2012-12-15 16:49:32
【问题描述】:

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

如何引用发送方 ViewController 来隐藏按钮?我必须将root ViewController 的实例传递给登录还是有其他方法?

【问题讨论】:

    标签: objective-c ios cocoa-touch uiviewcontroller


    【解决方案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

    【讨论】:

      【解决方案2】:

      您应该使用委托。使带有按钮的 VC 成为其他人的代表。登录成功后,您关闭您的 VC 并调用委托方法来隐藏按钮。

      【讨论】:

        猜你喜欢
        • 2012-01-22
        • 2016-05-06
        • 1970-01-01
        • 2014-09-20
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        相关资源
        最近更新 更多