在表格视图的 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 文件之间快速传递数组的主要内容,如果未能解决你的问题,请参考以下文章

无法将数组名称传递到 Swift 3 中的表视图中

快速在标签查看的控制器之间传递数据?

如何使用 SWRevealViewController 在两个视图之间传递数组?

在表格视图控制器iOS swift中搜索特定记录

解析对象数组并填充表格视图单元格 Swift

在 Swift 中的视图控制器之间传递自定义类数据