在表格视图的 swift 文件之间快速传递数组
Posted
技术标签:
【中文标题】在表格视图的 swift 文件之间快速传递数组【英文标题】:Swift passing array between swift files for tableview 【发布时间】:2016-08-11 02:02:02 【问题描述】:我在一个视图控制器中有一个按钮操作连接到另一个表视图控制器。我需要通过单击按钮传递一些文本字段值以显示在另一个表视图中。在第一个视图中,我有一个全局数组:
var estRent = [AnyObject]()
在 buttonAction 中附加值:
@IBAction func calculateButtonAction(sender: UIButton)
...
estRent.append(weekRent)
estRent.append(monthRent)
estRent.append(yearRent)
estRent.append(interestRate)
estRent.append(loanAmount)
estRent.append(monthInterest)
覆盖prepareForSegue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
if (segue.identifier == "Load View")
let svc = segue.destinationViewController as! NextTableViewController
svc.rentArray = self.estRent
在NextTableViewController中,有一个全局数组:
var rentArray = [AnyObject]()
下一个表视图看不到数组中的值。感谢任何帮助。
【问题讨论】:
看不到值是什么意思? 我的意思是当我点击按钮时,表格视图什么也看不到。所以我猜这个数组还没有通过。但我不知道问题是什么。 在语句let svc = segue.destinationViewController as! NextTableViewController
上添加断点并更新我的结果是否该语句已执行。
您何时尝试访问阵列?因为您的NextTableViewController
将在设置rentArray
属性之前创建。因此,如果您尝试在初始化方法中访问该数组,则不会有任何内容。
我想在填写文本字段并单击按钮时访问数组。我怎样才能意识到这一点?
【参考方案1】:
第一个视图控制器:
import UIKit
class ViewController: UIViewController
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var ageTextField: UITextField!
@IBOutlet weak var classTextField: UITextField!
var estRent = [AnyObject]()
@IBAction func goButtonAction(sender: UIButton)
estRent.append(nameTextField.text!)
estRent.append(ageTextField.text!)
estRent.append(classTextField.text!)
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
[estRent .removeAll()]
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
print(estRent)
if (segue.identifier == "LoadView")
let svc = segue.destinationViewController as! RentTableViewController
svc.rentArray = self.estRent
RentTableViewController:
import UIKit
class RentTableViewController: UITableViewController
var rentArray = [AnyObject]()
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return rentArray.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "studentCell")
let tableCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("studentCell", forIndexPath: indexPath)
let rentLabel: UILabel = UILabel.init(frame: CGRectMake(10, 10, 100, 25))
rentLabel.text = rentArray[indexPath.row] as? String
tableCell.addSubview(rentLabel)
return tableCell
Click here for Main.storyboard image
您必须在情节提要中将 segue 标识符指定为“LoadView”
Click here to view screen short for "How to give segue identifier"
【讨论】:
感谢您的回复。我在两个视图控制器中都添加了 prepareForSegue 函数并且已经解决了它。干杯。 我创建了一个示例项目。使用以下 Git 中心链接:github.com/k-sathireddy/SampleTableView以上是关于在表格视图的 swift 文件之间快速传递数组的主要内容,如果未能解决你的问题,请参考以下文章