问题描述
我目前有一个子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