gpt4 book ai didi

swift - 使用可重复使用的弹出式 VC 函数传递数据

转载 作者:行者123 更新时间:2023-11-28 07:26:17 25 4
gpt4 key购买 nike

我正在尝试使用可重用函数将数据从弹出式 VC 传递到父 VC,以显示弹出式窗口并获取结果。我尝试在弹出窗口中使用带有函数变量的闭包方法,但出现错误“UIViewController 没有成员‘onSave’(函数变量)。任何帮助将不胜感激。thx

我已经使用了委托(delegate)和转场,但我想避免这样一个函数可以出现在弹出窗口中并收集许多实例的选择。

// Parent VC
class a2ExpenseAddViewController: UIViewController {
@IBAction func selectEtype(_ sender: Any) {
popTitle = "Expense Types"//global var
popMessage = "Select type below or add new" // global var
menuPopup(choices: eTypes){ result in guard let result = else{
return
}
self.eType.setTitle(result, for: .normal)
print("popChoice=",result)
}
}

extension UIViewController {

func menuPopup (choices: [String], completion: @escaping (_ choice: String?) -> ()) {
let main = UIStoryboard(name: "Main", bundle: nil)
let goto = main.instantiateViewController(withIdentifier: "popup")
popChoices = choices
// Error below here - UIViewController has no member 'onSave'
goto.onSave = { (data: String) -> () in
choice = data
}
self.present(goto, animated: true, completion: nil)
}

//Popup VC
PopupViewController: UIViewController,.. // storyboard id is 'popup'
var onSave: ((_ data: String) -> ())?

@IBAction func add(_ sender: Any) {
popChoice = choice.text!
onSave?(popChoice)
dismiss(animated: true) }

我希望通过 onSave(data) 将结果分配给按钮标题。我收到错误“UIViewController 没有成员‘onSave’(函数变量)”。

最佳答案

在实例化后将 ViewController 转换为特定的类类型。

let goto = main.instantiateViewController(withIdentifier: "popup") as? PopupViewController

那么你应该可以做到这一点

goto.onSave = { (data: String) -> () in 
choice = data
}

关于swift - 使用可重复使用的弹出式 VC 函数传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529628/

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