微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用协议/委托将值从子VC传递到父VC

如何解决无法使用协议/委托将值从子VC传递到父VC

我目前有一个子VC添加到父VC的容器视图中,并且我正尝试使用协议/代理将一个值从子Vc传递到父VC。

我首先创建了协议:

<?PHP 
    if ( candidates_can_apply() ) { 
        $external_apply = get_post_meta( $post->ID,'_apply_link',true ); 
        
    if(!empty($external_apply)) {
    
      if(is_user_logged_in()){
    
         echo '<a class="button" target="_blank" href="'.esc_url($external_apply).'">'.esc_html__( 'Apply on company site','workscout' ).'</a>';
    
      } else {
    
    echo '<a href="#login-dialog" class="small-dialog popup-with-zoom-anim login-btn">'.esc_html__( 'Login to apply on company site','workscout' ).'</a>';
    
    } else {
        get_job_manager_template( 'job-application.PHP' ); 
    }
?>

然后,为父VC配备以下协议:

protocol ChildToParentProtocol: AnyObject {
    func passValuetoParent(value: Bool)
}

在IB中名为“ childToParentSegue”的IB中,从父级的容器视图到子级视图控制器创建了一个序列。然后,将其添加到父VC:

extension ParentVC: ChildToParentProtocol {
    func passValuetoParent(value: Bool) {
        print(value)
    }
}

最后,将其添加到子VC:

override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if let vc = segue.destination as? ChildVC,segue.identifier == "childToParentSegue" {
        vc.delegate = self
    }
}

当我按下子VC中的按钮时,即使该按钮正在工作,父VC也未收到该值。

已更新

我通过使用addChild(viewController)和viewController.didMove(toParent:self)将子VC添加到父VC

解决方法

我通过使用addChild(viewController)viewController.didMove(toParent: self)将子VC添加到父VC。

那是问题。没有segue。您正在以编程方式显示子VC。

您应该在提供子VC的同一位置设置委托。我猜你有这样的代码:

let viewController = ChildVC(...)
addChild(viewController)
viewController.didMove(toParent: self)

在以上几行之后设置代表:

viewController.delegate = self

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。