关闭所有导航 ViewController 后将值传递给主 ViewController 并执行操作

Posted

技术标签:

【中文标题】关闭所有导航 ViewController 后将值传递给主 ViewController 并执行操作【英文标题】:Pass values and do actions to main ViewController after dismissing all navigation ViewControllers 【发布时间】:2020-07-17 23:08:44 【问题描述】:

我有一个 mainViewController,按一个按钮显示 Navigation VC 的 vc1,然后按一个按钮转到 vc2 然后 vc3,在 Navigation VC 的 vc3 上按一个按钮后,我想关闭整个 Navigation VC 并使用关于vc3 在 mainViewController 上进行设置。

下面是我的vc3,猜猜我应该在@IBAction func onContiuneEditing 中的navigationController?.dismiss 之前添加代码?

提前谢谢你!

class PhotoViewController: UIViewController 
    
    var photo: Photo! = nil
    
    @IBOutlet var imageView: UIImageView!
    @IBOutlet var dateLabel: UILabel!
    @IBOutlet var filterLabel: UILabel!
    
    override func viewDidLoad() 
        super.viewDidLoad()
       
        imageView.image =  UIImage(data: photo.currentImage)
        dateLabel.text = String(photo.date.description.split(separator: " ")[0])
        filterLabel.text = photo.filter
        
        
        // Do any additional setup after loading the view.
    
    
    @IBAction func onShare(_ sender: Any) 
        let activityController = UIActivityViewController(activityItems: [imageView.image!], applicationActivities: nil)
            self.present(activityController, animated: true, completion: nil)
        
    
    
    
    @IBAction func onContiuneEditing(_ sender: Any) 
      
        
        navigationController?.dismiss(animated: true, completion: nil)
    

【问题讨论】:

【参考方案1】:

您可以通过设置和使用展开转场来做到这一点。

【讨论】:

【参考方案2】:

如果你想将数据传递到vc3到vc1,你可以使用NotificationCenterProtocol Delegates

因为您有 3 层导航,我建议您使用 NotificationCenter

使用 NotificationCenter 发布本地通知并在您的 vc1.xml 中设置一个侦听器。当那个监听器被执行时,你可以执行你的操作。 例如:

PhotoViewController

@IBAction func onContiuneEditing(_ sender: Any) 
NotificationCenter.default.post(name: NSNotification.Name(rawValue:CONTINUE_EDITING), object: nil)
  navigationController?.dismiss(animated: true, completion: nil)

vc1

override func viewDidLoad() 
        NotificationCenter.default.addObserver(self, selector: #selector(continueEditing), name: Notification.Name(rawValue: CONTINUE_EDITING), object: nil)


func continueEditing() 


【讨论】:

以上是关于关闭所有导航 ViewController 后将值传递给主 ViewController 并执行操作的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮后将值添加到不同的列

关闭时将值传递给视图控制器时出错 |斯威夫特 5

登录成功后将视图导航到另一个视图

如果 ViewController 包含作为根的 TableView,如何将 ViewController 添加到导航控制器? [关闭]

具有相同操作的所有 viewController 的通用导航栏

为所有 ViewController 自定义导航控制器