模态ViewController退出时使控件返回功能

时间:2018-07-16 17:56:37

标签: swift

我需要呈现一个模式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
    }
}

2 个答案:

答案 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?()
    }
}