Swift:在dismissViewControllerAnimated上将字符串值从VC2传递给VC1

时间:2016-03-11 18:36:17

标签: ios swift

在这里学习了许多有用的东西之后第一次询问!

我有一个带按钮和标签的VC1。 该按钮被编码为以编程方式呈现VC2(在IB中没有segue)。 VC2有一个包含字符串值的单元格的tableview。

当我点击VC2中的单元格时,我试图获取所选单元格的字符串值,并将其传递回VC1中的label.text。

第一个ViewController代码:

class VC1: UIViewController {
    ... ...

    @IBOutlet weak var LabelText: UILabel!
    var passedString = "Example"

    override func viewWillAppear(animated: Bool) {
        LabelText.text = "\(passedString)"
    }

    @IBAction func chooseLabelTextBtnPressed(sender: AnyObject) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("VC2") as! VC2
        self.presentViewController(vc, animated: true, completion: nil)
}

SecondViewController代码:

class VC2: UIViewController, UITableViewDelegate, UITableViewDataSource {    
    ... ...

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow;
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! VC2_tableViewCell!;
    let valueToPass = currentCell.IBOutletLbl.text
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let viewController = storyboard.instantiateViewControllerWithIdentifier("VC1") as! VC1
    viewController.passedString = valueToPass!

    //self.presentViewController(viewController, animated: true , completion: nil)

    self.dismissViewControllerAnimated(true, completion: nil)
}

我希望VC1中的func viewWillAppear()会在VC2被解除时更新标签的String值,但它不会。

我不能将VC4中的presentViewController用于VC1,因为它可能会再次打开VC1而不是返回,然后VC1中的其他变量将无法访问。

救救我!谢谢!

2 个答案:

答案 0 :(得分:1)

您应该将委托从VC1传递到VC2,然后只需调用委托方法进行更新。

在此发送参考资料给VC2。

@IBAction func chooseLabelTextBtnPressed(sender: AnyObject) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("VC2") as! VC2
        vc.delegate = self
        self.presentViewController(vc, animated: true, completion: nil)
}

在VC2中调用self.dismissViewControllerAnimated(true, completion: nil)之前,请致电delegate.someMethod(someValue)

还要确保你的代表是一个弱参考。

答案 1 :(得分:0)

执行此操作时:

let viewController = storyboard.instantiateViewControllerWithIdentifier("VC1") as! VC1

它会创建VC1的新实例,但实际上并未引用呈现VC1的{​​{1}}。

相反,您应该在VC2&之间添加委派。 VC1传递数据。