如何在Swift

时间:2016-05-07 17:33:23

标签: swift delegates protocols

我有一个vc将数组传递给第二个vc。第二个vc更改了数组,并且在解除时必须将修改后的数组传递给第一个vc。

将数组传递给第一个,我管理

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp

        vc.nomeAlunoP = nomeAluno.text!
        vc.turmaAlunoP = turmaAluno.text!
        vc.medicacao = medicacao

        vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext

        self.presentViewController(vc, animated: true, completion: nil)

将修改后的数组传回第一个vc无法

a)我在第一个vc文件中创建了协议,我在deletegated中创建了func以获得数组的值

protocol MedicacaoAddDelegate: class {
    func receiveRemedios(rMedicacao: [AnyObject])
}

class MedicacaoAdd: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MedicacaoAddDelegate {

    var medicacao = [AnyObject]()

    func receiveRemedios(rMedicacao: [AnyObject]) {

        print("dentro do receiveRemedios")
        medicacao = rMedicacao
        trataCesto()
    }

b)在第二个vc中我创建了变量“delegate”并在按下按钮时调用了该函数

class MedicacaoPopUp: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableview: UITableView!

    weak var delegate: MedicacaoAddDelegate?

    var nomeAlunoP = ""
    var turmaAlunoP = ""
    var medicacao = [AnyObject]()

    override func viewDidLoad() {

        self.tableview.delegate = self
        self.tableview.dataSource = self

    }

    @IBAction func btnDismiss(sender: UIButton) {
        self.delegate?.receiveRemedios(medicacao)
        self.dismissViewControllerAnimated(true, completion: nil)
    }

我真的不知道我做错了什么。我已经尝试了在stackoverflow上找到的所有替代方案,但没有任何效果。

2 个答案:

答案 0 :(得分:0)

您似乎忘记设置所呈现VC的代理。

let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp

添加

vc.delegate = self

答案 1 :(得分:0)

真的是一个结构良好的代码。使用协议和委托作为回调从弹出窗口返回数据是个好主意。

只有一件事......这是什么

__m128 dst = _mm_cvtps_epi32( _mm_floor_ps(__m128 src) );

在第一个代码段中?