[英]Swift: pass string value from VC2 to VC1 on dismissViewControllerAnimated
在這里學習了很多有用的東西后第一次提問!
我有一個帶有按鈕和標簽的 VC1。 該按鈕被編碼為以編程方式呈現 VC2(在 IB 中沒有 segue)。 VC2 有一個包含字符串值的單元格的表格視圖。
當我單擊 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 值,但事實並非如此。
我不能使用從 VC2 到 VC1 的 presentViewController,因為它可能會再次打開 VC1 而不是返回,然后 VC1 中的其他變量將無法訪問。
幫我! 謝謝!
您應該將委托從 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)
還要確保您的委托是弱引用。
當你這樣做時:
let viewController = storyboard.instantiateViewControllerWithIdentifier("VC1") as! VC1
它創建了一個新的VC1
實例,實際上並不引用呈現VC2
的VC1
。
相反,您應該在VC1
和VC2
之間添加委派以傳遞數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.