如何解决无法使用协议/委托将值从子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 举报,一经查实,本站将立刻删除。