我需要呈现一个模式VC,该VC在我的呈现VC中设置一个属性,然后我需要在呈现VC中使用该值做一些事情。我必须能够将指向不同属性的指针传递给此函数,以便其可重用。我有下面的代码(KeyPickerTableViewController
是模式VC)。
它应该工作,但不能工作,因为present(picker...
之后的那一行在显示选择器后立即执行。
我如何使演示的VC处于“等待”状态,直到退出模式VC?
@objc func fromKeyTapped(_ button: UIBarButtonItem) {
print("from tapped")
setKey(for: &sourceKey, presentingFrom: button)
}
@objc func toKeyTapped(_ button: UIBarButtonItem) {
print("from tapped")
setKey(for: &destKey, presentingFrom: button)
}
fileprivate func setKey(for key: inout Key!, presentingFrom buttonItem: UIBarButtonItem) {
let picker = KeyPickerTableViewController()
picker.delegate = self
picker.modalPresentationStyle = .popover
picker.popoverPresentationController?.barButtonItem = buttonItem
present(picker, animated: true, completion: nil)
if let delKey = delegatedKey {
key = delKey
}
}
答案 0 :(得分:1)
在呈现VC的同时,在其完成处理程序中添加解除模式的VC动作,以便在完成解除后显示Viewcontroller
present(picker, animated: true, completion: { (action) in
//dismissal action
if let delKey = delegatedKey {
key = delKey
}
})
答案 1 :(得分:1)
您可以使用委托模式或闭包。
我将执行以下操作 1.我不会使用inout模式,我会先调用popover,然后分别更新需要更新的内容 2.在KeyPickerTableViewController中定义属性var actionOnDismiss:(()->())?并在初始化KeyPickerTableViewController之后将此操作设置为我们需要的操作
我可以用代码显示它,但是您显示的摘要不够清晰,无法提出特定的修订。请参考下图。
import UIKit
class FirstVC: UIViewController {
var key = 0
@IBAction func buttonPressed(_ sender: Any) {
let vc = SecondVC()
vc.action = {
print(self.key)
self.key += 1
print(self.key)
}
present(vc, animated: true, completion: nil)
}
}
class SecondVC: UIViewController {
var action: (()->())?
override func viewDidLoad() {
onDismiss()
}
func onDismiss() {
action?()
}
}