我在使用自定义警报时遇到了问题,并将动作发送回了调用警报的VC。
我有两节课:
我想要实现的用户旅程:
用户完成操作后,将在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
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()
不执行任何操作。
提前感谢您的帮助!
答案 0 :(得分:1)
我想您的问题是,您在var jsonServer = require('json-server')
var server = jsonServer.create()
server.get('/data/:id/sessions/:sessionId', function (req, res) {}
上设置了ConfirmationAllertDelegate
,应该使用该委托来调用它。
相反,在创建goToPreviousVc
对象时尝试设置代理人
myAlert
此后,自创建警报以来,您的警报将有一个委托,并且当您按下按钮时,它将按预期工作。
答案 1 :(得分:1)
尝试使用以下代码
let myAlert = storyboard.instantiateViewController(withIdentifier: "ConfirmationAllert")
(myAlert as? ConfirmationAllert).delegate = self
// the rest of your code