将数据从 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