在这里学习了许多有用的东西之后第一次询问!
我有一个带按钮和标签的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中的其他变量将无法访问。
救救我!谢谢!
答案 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
传递数据。