【问题标题】:ViewController return results to the ViewController which calls it [duplicate]ViewController 将结果返回给调用它的 ViewController [重复]
【发布时间】: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
  • 这个问题已经被问了很多很多次了

标签: ios xcode uiviewcontroller


【解决方案1】:

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

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

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

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

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

    weak var delegate: ViewControllerAUpdatingProtocol!
    

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

    weak var delegate: ViewControllerAUpdatingProtocol?
    
  3. 现在从关闭 ViewController-B 的位置调用委托的“更新”方法。

    delegate.update(withSomeValue: yourValue)
    
  4. 然后使 ViewController-A 符合协议 ViewControllerAUpdatingProtocol:

    extension ViewControllerA: ViewControllerAUpdatingProtocol {
         func update(withSomeValue someValue: SomeValueType) {
              // your implementation goes here
         }
     }
    
  5. 初始化 ViewController-B 的“delegate”属性 视图控制器-A:

        viewControllerBInstance.delegate = self
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多