iOS - 在其上方显示模态后保留视图控制器状态

时间:2015-06-02 18:45:26

标签: ios swift uiviewcontroller delegates modal-dialog

所以我有一个视图控制器A,它以模态方式呈现视图控制器B.当B出现时,A被设置为B的委托。 B顶部有两个按钮:完成和取消。两个都打电话

dismissViewControllerAnimated(true, completion: nil)

但是Done还调用了一个委托方法,它将一些信息存储在A中的数组中。一切都很好,除了当我回到B中,其中一些东西已经存储到前一个Done单击的数组中,然后单击取消相反,这次将数组初始化为默认的空状态。

如何在保持该阵列的现有状态的同时解除B?感谢。

修改

抱歉 - 意识到几乎不可能想象我所描述的内容,所以这里是代码的要点:

class A: UIViewController, BProtocol {

    var array: [User] = []

    func viewDidLoad() {
     ...
    }

    func BProtocolFunction(newArray) {
        array = newArray
    }

    func prepareForSegue() {
        ...
        B.delegate = self
    }

}


class B: UIViewController {
    var delegate: BProtocol?

    // Works great, copies this new array to the array in A.  However,
    //   if you go BACK into this modal, and then click cancel, that
    //   array is reset
    func doneButtonClicked() {
        delegate.BProtocolFunction(newArray)
        dismissViewControllerAnimated(...)
    }

    // So if the user clicks cancel, the modal is dismissed
    //   but the array is reset to []
    func cancelButtonClicked() {
        dismissViewControllerAnimated(...)
    }
}

总结一下:用户从A到B. B以模态呈现。在B中,他们做了一些事情,然后单击Done并调用一个委托方法来更改A中的数组,并且模态被解除。之后,如果它们返回到B,然后单击取消 - 阵列将重置为[]。我希望它从第一次完成点击中保留数组。

1 个答案:

答案 0 :(得分:0)

代码中某处必定存在错误。

根据您发布的代码判断,您的数组无法重置为零,因为您的cancelButtonClicked不会触发任何委托

我的猜测是:

  1. 您将cancelButton的操作目标放错位置为doneButtonClicked()函数。
  2. 在A ViewController中的某个位置,您重置阵列而不是BProtocolFunction