将数据从 TableViewController 传递到 XIB 文件而不使用 Segues-Swift 3

Posted

技术标签:

【中文标题】将数据从 TableViewController 传递到 XIB 文件而不使用 Segues-Swift 3【英文标题】:Pass Data from TableViewController to XIB file Without Segues- Swift 3 【发布时间】:2017-03-19 00:31:33 【问题描述】:

我是 swift 新手,正在学习 swift 3

我试图将数据从表视图控制器传递到 XIB 文件。我的表格视图控制器中有水果列表。单击该按钮后,我想在新的 XIB 控制器的标签中显示水果名称。我尝试了下面的代码,但它没有显示 XIB vc 中的任何数据..请告诉我我在这里缺少什么

我的 TableVC:

class FruitsTableViewController: UITableViewController 

    var fruits = ["Apple", "Apricot", "Banana", "Blueberry", "Cantaloupe", "Cherry",
                  "Clementine", "Coconut", "Cranberry", "Fig", "Grape", "Grapefruit",
                  "Kiwi fruit", "Lemon", "Lime", "Lychee", "Mandarine", "Mango",
                  "Melon", "Nectarine", "Olive", "Orange", "Papaya", "Peach",
                  "Pear", "Pineapple", "Raspberry", "Strawberry"]

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return fruits.count
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = fruits[indexPath.row]

        return cell
    

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        let dataToPass = fruits[indexPath.row]
        let detailsVC = ShowDetailsXibViewController(nibName: "ShowDetailsXibViewController", bundle: nil)
        detailsVC.dataFromVC = dataToPass
        self.present(ShowDetailsXibViewController(), animated: true, completion: nil)

    


第二个VC:

class ShowDetailsXibViewController: UIViewController 

    @IBOutlet weak var lblFruit: UILabel!

    var dataFromVC : String?

    override func viewDidLoad() 
        super.viewDidLoad()

        lblFruit.text = dataFromVC
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    


【问题讨论】:

请同时发布 ShowDetailsXibViewController 方法。 这是我的完整代码。不知道你的意思是 ShowDetailsXibViewController 方法..请知道 使用present(detailsVC, animated: true),即使用你之前配置的detailsVC。当我们在这里时,您可能会丢失不必要的 self. 引用,而 completion 默认为 nil,因此也可以省略。 【参考方案1】:

问题在于代码中的以下行:

self.present(ShowDetailsXibViewController(), animated: true, completion: nil)

你在那里实例化一个 ShowDetailsXibViewController 的新实例,不要使用你已经用这一行创建的实例:

let detailsVC = ShowDetailsXibViewController(nibName: "ShowDetailsXibViewController", bundle: nil)

如果您将第一行更改为以下内容,它应该可以工作:

self.present(detailsVC, animated: true, completion: nil)

【讨论】:

乐于助人:)【参考方案2】:

问题出在这一行:

    self.present(ShowDetailsXibViewController(), animated: true, completion: nil)

在这里,您正在创建另一个ShowDetailsXibViewController,并显示。而不是呈现先前创建的控制器,您应该编写:

    self.present(detailsVC, animated: true, completion: nil)

【讨论】:

以上是关于将数据从 TableViewController 传递到 XIB 文件而不使用 Segues-Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

segue 将数据从 tableviewcontroller 解析到另一个

如何将 Firebase iOS 中的数据从 TableViewController 传递到另一个 ViewController

将数据从 TableViewController 传递到 XIB 文件而不使用 Segues-Swift 3

委托/协议不起作用:将数组从 TableViewController 传递给父 ViewController

加载主 TableViewController 后,值从核心数据中消失

使用动态原型单元将 CloudKit 记录从 TableViewController A 传递到 TableViewControllerB