gpt4 book ai didi

ios - Swift 4 – 带有协议(protocol)的自定义警报

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:46 26 4
gpt4 key购买 nike

我在自定义警报和将操作发送回调用警报的 VC 方面遇到问题。

我有两个类:

  • 工厂
  • ConfirmationAllert

我正在努力实现的用户旅程:

用户在完成后在Factory 类中执行操作我使用这样的代码调用ConfirmationAllert:

func showAlert() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myAlert = storyboard.instantiateViewController(withIdentifier: "ConfirmationAllert")
myAlert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
myAlert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
(view as? UIViewController)?.present(myAlert, animated: true, completion: nil)
}

ConfirmationAllert 类中我有一个按钮,它:

  • 解除警报
  • Factory 发送操作 - 此操作是解散 Factory VC 并返回到之前的 VC。

第一个操作成功完成,第二个操作无效。我正在使用协议(protocol)将第二个操作发送到 Factory VC,但有些东西不起作用,我不知道是什么。

这是我的代码:

工厂

final class FactoryViewController: UIViewController {
let alert = ConfirmationAllert()

@IBAction func didPressSave(_ sender: UIButton) {
showAlert()
}

func goToPreviousVc() {
alert.delegate = self
print("Inside factory") -> print don't get called
// navigationController?.popViewController(animated: true) -> none of this works
// dismiss(animated: true, completion: nil) -> none of this works
}
}

extension FactoryViewController: ConfirmationAllertDelegate {
func dismissVC() {
goToPreviousVc()
print("Go to previous")
}
}

ConfirmationAllert

protocol ConfirmationAllertDelegate {
func dismissVC()
}

class ConfirmationAllert: UIViewController {
var delegate: ConfirmationAllertDelegate?

@IBAction func didPressOk(_ sender: UIButton) {
self.delegate?.dismissVC()
}
}

我没有包含 viewDidLoad 方法,因为我没有在那里调用任何东西。

我的问题是方法 goToPreviousVc() 不执行任何操作。

预先感谢您的帮助!

最佳答案

我猜你的问题是你在 goToPreviousVc 设置了你的 ConfirmationAllertDelegate,应该使用该委托(delegate)调用它。

相反,尝试在创建 myAlert 对象时设置委托(delegate)

let myAlert = storyboard.instantiateViewController(withIdentifier: "ConfirmationAllert")
(myAlert as? ConfirmationAllert).delegate = self
// the rest of your code

之后,您的警报将在创建后有一个委托(delegate),当您按下按钮时,它应该会按您预期的方式工作。

关于ios - Swift 4 – 带有协议(protocol)的自定义警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52476667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com