2017-07-28 27 views
0

另一个视图控制器我有两个UIViewControllers和每一个具有的UITableView。比方说,当我从View-A调用到View-B时,我将在View-B中的UITableView中标记的单元格取出,在按下一个按钮后,我想返回一个包含从View-B中选择的所有数据的数组查看-A,关闭View-B并在View-A的TableView中表示该信息。 我该如何传递数组?我该如何在View-A中实时加载数据以在轻视View-B之后显示它?返回数组中夫特

有什么想法? 非常感谢!

+0

您使用的故事板? – Phyber

+0

是的,我正在使用它。 –

+0

您可以使用委托或关闭。 –

回答

1
protocol DataPasserDelegate { 
    func sendDatatoA(dataArrayFromB : Array<AnyObject>) 
} 

class ViewB: UIViewController { 

var delegate: DataPasserDelegate! 

var dataArrayB = Array<AnyObject>() 

@IBAction func sendData(sender: Any){ 
    self.dismiss(animated: true) { 
     self.delegate.sendDatatoA(dataArrayFromB: self.dataArrayB) 
    } 
} 
} 

class ViewA: UIViewController, DataPasserDelegate { 

@IBOutlet weak var tableViewA: UITableView! 

var dataArrayA = Array<AnyObject>() 

//MARK: - DataPasserDelegate 
func sendDatatoA(dataArrayFromB: Array<AnyObject>) { 
    dataArrayA = dataArrayFromB 

    self.tableViewA.reloadData() 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destVC = segue.destination as? ViewB{ 
     destVC.delegate = self 
    } 
} 
} 
+0

真棒兄弟,这个作品真的很好!非常感谢你! –

+0

最受欢迎;)快乐编码! –

0

所以,你可以使用prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "segueID") { 
     if let controller = segue.destination as? YourVC{ 
      controller.array = yourArray 
      controller.tableView.reloadData() 
     } 
    } 
} 
+0

在“如果让控制器== segue.destination as?ListsViewController”这行中说变量绑定在一个条件需要一个initilizer。任何想法 ? –

+0

我的代码出错了,现在检查它 – Phyber

+0

谁降低了这个数字,为​​什么?我通常会将变量传递给其他VC。这有什么问题? –

-1

您将需要使用委托这一点。有关代表的更多信息,您可以通过我的博客here