override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.forgotPasswordSegue {
guard let navigationController = segue.destination as? UINavigationController else { return }
guard let forgotPasswordViewController = navigationController.viewControllers.first as? ForgotPasswordEmailViewController else { return }
forgotPasswordViewController.viewModel.email.value = viewModel.model.email.value
}
if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.showPhoneViewSegue {
guard let destinationViewController = segue.destination as? EnterPhoneViewController else { return }
destinationViewController.successFallbackViewController = self
}
}
这是当前被覆盖的准备功能。据我所知,这个函数是在执行segue之前调用的。类似地,是否有任何函数可以编写,以便在完成SEGUE后执行指令。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在iOS开发中,如果你希望在完成Segue(过渡)后执行某些操作,你可以利用UIViewController
的生命周期方法或者自定义回调。由于SwiftUI和UIKit有所不同,这里我假设你是在使用UIKit。以下是一些常见的做法:
viewDidAppear(_:)
: 在目标ViewController中覆盖viewDidAppear(_:)
方法。这个方法在视图控制器的视图被添加到窗口层级并可见时调用。这是一个执行Segue后逻辑的好地方。override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 在这里执行Segue完成后需要进行的操作
}
Delegate模式: 如果你需要从目标ViewController向原始ViewController传递信息或通知它某些操作已完成,可以使用代理(Delegate)模式。定义一个协议,并让你的原始ViewController遵循这个协议。然后,在目标ViewController中设置代理并在适当的时候调用代理方法。
Notification Center: 使用NSNotificationCenter(现在称为NotificationCenter
)来发送通知。在完成Segue后的ViewController中发送通知,原始ViewController可以注册监听这些通知并作出响应。
Closure(闭包)或Block: 你可以在准备ForSegue时传递一个闭包给目标ViewController。这样,目标ViewController在完成其任务后可以直接调用该闭包。
示例代码(使用闭包):
// 假设在ForgotPasswordEmailViewController中
var onCompletion: (() -> Void)?
// 在ForgotPasswordEmailViewController中的某个合适位置调用闭包
onCompletion?()
// 修改prepare(for:sender:)以传递闭包
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.forgotPasswordSegue,
let navigationController = segue.destination as? UINavigationController,
let forgotPasswordViewController = navigationController.viewControllers.first as? ForgotPasswordEmailViewController {
forgotPasswordViewController.viewModel.email.value = viewModel.model.email.value
forgotPasswordViewController.onCompletion = {
// 这里是Segue完成后要执行的代码
}
}
}
选择哪种方法取决于你的具体需求,比如是否需要双向通信、是否涉及多个对象之间的协调等。