ViewController 将结果返回给调用它的 ViewController [重复]

Posted

技术标签:

【中文标题】ViewController 将结果返回给调用它的 ViewController [重复]【英文标题】:ViewController return results to the ViewController which calls it [duplicate] 【发布时间】:2018-06-01 13:03:07 【问题描述】:

我想从 ViewController-A

打开新的 ViewController-B

然后在关闭 ViewController-B 之后它返回 Some Value (Result)ViewController-A

是否可以不使用通知?

如果是,那么如何?

【问题讨论】:

使用委托或展开segue 检查这个:useyourloaf.com/blog/… 您的控制器是否嵌入在 UINavigationController 中? 是 ViewController-A 嵌入式 UINavigationController 这个问题已经被问了很多很多次了 【参考方案1】:

更“干净”的方式是使用委托模式。 实现此模式的步骤:

    在你的 ViewController-B 中声明协议,例如:

     protocol ViewControllerAUpdatingProtocol: class 
    
         func update(withSomeValue someValue: SomeValueType)
    
     
    

    将其设为仅类,因为我们知道 ViewController-A 类对象将符合它。

    将“delegate”属性添加到您的 ViewController-B:

    weak var delegate: ViewControllerAUpdatingProtocol!
    

    如果 ViewController-A 不一定要更新,您可以将此属性设为可选:

    weak var delegate: ViewControllerAUpdatingProtocol?
    

    现在从关闭 ViewController-B 的位置调用委托的“更新”方法。

    delegate.update(withSomeValue: yourValue)
    

    然后使 ViewController-A 符合协议 ViewControllerAUpdatingProtocol:

    extension ViewControllerA: ViewControllerAUpdatingProtocol 
         func update(withSomeValue someValue: SomeValueType) 
              // your implementation goes here
         
     
    

    初始化 ViewController-B 的“delegate”属性 视图控制器-A:

        viewControllerBInstance.delegate = self
    

【讨论】:

以上是关于ViewController 将结果返回给调用它的 ViewController [重复]的主要内容,如果未能解决你的问题,请参考以下文章

服务如何将结果返回给活动

服务如何将结果返回给活动

从委托的源 ViewController 调用异步闭包

迭代器理解函数返回值与返回结果

如何从导航堆栈中删除 ViewController 并且没有返回到它的选项-Swift

将 iOS 中被调用函数的结果返回给 JavaScript 中 WkWebView 中的调用函数