如何在swift3中将每个tableViewcell数据发送到collectionview

Posted

技术标签:

【中文标题】如何在swift3中将每个tableViewcell数据发送到collectionview【英文标题】:How to send each tableViewcell data to collectionview in swift3 【发布时间】:2017-03-16 03:59:50 【问题描述】:

我创建了动态表单,用户输入了表单数量,并且为此创建了表格单元格。提交所有表单后,所有详细信息都应以 excel 格式显示,因为我已经创建了集合视图,但问题是唯一选择的单元格值正在打印。 我将它用于collectionView

https://github.com/brightec/CustomCollectionViewLayout

tableViewController.swift

struct Information 
var name: String
var phone: String
var email: String
var gender: String

init(name: String, phone: String, email: String, gender: String) 
    self.name = name
    self.phone = phone
    self.gender = gender
    self.email = email

         import UIKit
class tableViewController: UIViewController, UITableViewDataSource,UITableViewDelegate 

override func viewDidLoad() 
    super.viewDidLoad()
 

@IBOutlet var tableView: UITableView!
@IBOutlet var nameText: UITextField!
var name: String = ""
var phone: String = ""
var email: String = ""
var gender: String = ""
var shop = Int()
var namevalue = String()
var phoneValue = String()
    var emailValue = String()
    var genderValue = String()

var formData: [Information] = []

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int


    return shop


public func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
    let shop1 = [shop]

    return "Section \(shop1[section]))"


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell


let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! myTableViewCell

    if indexPath.section == 0
        if indexPath.row == 0
            print("THis is print 1",cell.emailText.text as Any)

        
    
    name =  cell.nameText.text!
    phone =  cell.phoneText.text!
    email =  cell.emailText.text!
    gender =  cell.genderText.text!
    print("This is name",name)

    let data = Information(name: name, phone: phone, email: email, gender: gender)

    formData.append(data)
  return cell



  public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

for _ in 0..<shop 

    print("THis is print 3",shop)





let indexPath = tableView.indexPathForSelectedRow //optional, to get from any UIButton for example

let currentCell = tableView.cellForRow(at: indexPath!)! as! myTableViewCell
name =  currentCell.nameText.text!
    phone =  currentCell.phoneText.text!
    email =  currentCell.emailText.text!
    gender =  currentCell.genderText.text!
 print("Hello hello3",formData)
 print("THis is print 4",currentCell.self.emailText.text as Any)

   tableView.reloadData()


@IBAction func submitButton(_ sender: Any) 

tableView.reloadData()

 print("THis is print 6",formData)

    let mainController : CollectionViewController = CollectionViewController(nibName: "CollectionViewController", bundle: nil)
    mainController.getShop = shop+1
    mainController.formData = formData
//         mainController.getPhone = phone
//         mainController.getEmail = email
//         mainController.getGender = gender
self.navigationController?.pushViewController(mainController, animated: true)

collectionViewController.swift

import UIKit

class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
var formData: [Information] = []

let dateCellIdentifier = "DateCellIdentifier"
let contentCellIdentifier = "ContentCellIdentifier"
@IBOutlet weak var collectionView: UICollectionView!

var getShop = Int()
var getName = String()
var getPhone = String()
var getEmail = String()
var getGender = String()

override func viewDidLoad() 
    super.viewDidLoad()

    self.collectionView .register(UINib(nibName: "DateCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: dateCellIdentifier)
    self.collectionView .register(UINib(nibName: "ContentCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: contentCellIdentifier)



// MARK - UICollectionViewDataSource

func numberOfSections(in collectionView: UICollectionView) -> Int 
    return getShop



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return 5



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    for element in formData
        print("This is element",element.name)

    
    if indexPath.section == 0 
        if indexPath.row == 0 
            let dateCell : DateCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: dateCellIdentifier, for: indexPath) as! DateCollectionViewCell
            dateCell.backgroundColor = UIColor.white
            dateCell.dateLabel.font = UIFont.systemFont(ofSize: 13)
            dateCell.dateLabel.textColor = UIColor.black
            dateCell.dateLabel.text = "Number"

            return dateCell
        
        if indexPath.row == 1 
            let dateCell : DateCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: dateCellIdentifier, for: indexPath) as! DateCollectionViewCell
            dateCell.backgroundColor = UIColor.white
            dateCell.dateLabel.font = UIFont.systemFont(ofSize: 13)
            dateCell.dateLabel.textColor = UIColor.black
            dateCell.dateLabel.text = "Name"

            return dateCell
        
        if indexPath.row == 2 
            let dateCell : DateCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: dateCellIdentifier, for: indexPath) as! DateCollectionViewCell
            dateCell.backgroundColor = UIColor.white
            dateCell.dateLabel.font = UIFont.systemFont(ofSize: 13)
            dateCell.dateLabel.textColor = UIColor.black
            dateCell.dateLabel.text = "Phone"

            return dateCell
        
        if indexPath.row == 3 
            let dateCell : DateCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: dateCellIdentifier, for: indexPath) as! DateCollectionViewCell
            dateCell.backgroundColor = UIColor.white
            dateCell.dateLabel.font = UIFont.systemFont(ofSize: 13)
            dateCell.dateLabel.textColor = UIColor.black
            dateCell.dateLabel.text = "Email"

            return dateCell
        else 
            let contentCell : ContentCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: contentCellIdentifier, for: indexPath) as! ContentCollectionViewCell
            contentCell.contentLabel.font = UIFont.systemFont(ofSize: 13)
            contentCell.contentLabel.textColor = UIColor.black
            contentCell.contentLabel.text = "Gender"

            if indexPath.section % 2 != 0 
                contentCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
             else 
                contentCell.backgroundColor = UIColor.white
            

            return contentCell
        
     else 
        if indexPath.row == 0 
            let dateCell : DateCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: dateCellIdentifier, for: indexPath) as! DateCollectionViewCell
            dateCell.dateLabel.font = UIFont.systemFont(ofSize: 13)
            dateCell.dateLabel.textColor = UIColor.black
            dateCell.dateLabel.text = String(indexPath.section)
            if indexPath.section % 2 != 0 
                dateCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
             else 
                dateCell.backgroundColor = UIColor.white
            

            return dateCell
        
           else if indexPath.row == 1
            
                let contentCell : ContentCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: contentCellIdentifier, for: indexPath) as! ContentCollectionViewCell
                contentCell.contentLabel.font = UIFont.systemFont(ofSize: 13)
                contentCell.contentLabel.textColor = UIColor.black
                contentCell.contentLabel.text = getName
                if indexPath.section % 2 != 0 
                    contentCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
                 else 
                    contentCell.backgroundColor = UIColor.white
                

                return contentCell
            

        else if indexPath.row == 2
        
            let contentCell : ContentCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: contentCellIdentifier, for: indexPath) as! ContentCollectionViewCell
            contentCell.contentLabel.font = UIFont.systemFont(ofSize: 13)
            contentCell.contentLabel.textColor = UIColor.black
            contentCell.contentLabel.text = getPhone
            if indexPath.section % 2 != 0 
                contentCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
             else 
                contentCell.backgroundColor = UIColor.white
            

            return contentCell
        
        else if indexPath.row == 3
        
            let contentCell : ContentCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: contentCellIdentifier, for: indexPath) as! ContentCollectionViewCell
            contentCell.contentLabel.font = UIFont.systemFont(ofSize: 13)
            contentCell.contentLabel.textColor = UIColor.black
            contentCell.contentLabel.text = getEmail
            if indexPath.section % 2 != 0 
                contentCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
             else 
                contentCell.backgroundColor = UIColor.white
            

            return contentCell
        
                    else 
            let contentCell : ContentCollectionViewCell = collectionView .dequeueReusableCell(withReuseIdentifier: contentCellIdentifier, for: indexPath) as! ContentCollectionViewCell
            contentCell.contentLabel.font = UIFont.systemFont(ofSize: 13)
            contentCell.contentLabel.textColor = UIColor.black
            contentCell.contentLabel.text = getGender
            if indexPath.section % 2 != 0 
                contentCell.backgroundColor = UIColor(white: 242/255.0, alpha: 1.0)
             else 
                contentCell.backgroundColor = UIColor.white
            

            return contentCell
     

1.我输入了我想要的表格编号

2。没有显示的表单,我为所有不同的表单输入了所有不同的值

3.但是发生的只是一个表单细节正在打印

【问题讨论】:

嗨。您说“问题是唯一选定的单元格值正在打印”。你能显示你选择单元格时使用的代码吗 @Luan 你好,我已经发布了我的屏幕截图,所以你会有想法 @LuanTran 你能解决吗? 当您点击提交按钮时,您是否要备份和收集数据? 没有。我想要的是,假设我填写 3 个不同的表单并点击提交按钮,所有值都应该打印 【参考方案1】:

您不应该在public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell 中获取您的数据

因为当你向上/向下滚动时,这个函数会一次又一次地调用。

 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell



    let k = indexPath.row+1
    let j:String? = String(k)

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! myTableViewCell

    cell.formNoLabel.text = j

    for indexPath in 0..<shop

    print(String(indexPath))
    

    if indexPath.section == 0
        if indexPath.row == 0
            print("THis is print 1",cell.emailText.text as Any)

        
    

    var data : Information
    if indexPath.row < formData.count 
        data = formData[indexPath.row]
     else 
        data = Information(name: name, phone: phone, email: email, gender: gender)
        formData.append(data)
    

    cell.data = data


   print("THis is print 2",formData)


            //cell.nameLabel.text = Array[indexPath.row]
    // cell.nameText.text = Array[indexPath.row]
          return cell


myTableViewCell 类中,您应该更改为

class myTableViewCell: UITableViewCell, UITextFieldDelegate 


@IBOutlet var nameLabel: UILabel!
@IBOutlet var nameText: UITextField!
@IBOutlet var phoneText: UITextField!
@IBOutlet var emailText: UITextField!
@IBOutlet var genderText: UITextField!

@IBOutlet var formNoLabel: UILabel!

var data: Information! 
    didSet 
        nameText.text = data.name
        phoneText.text = data.phone
        emailText.text = data.email
        genderText.text = data.gender
    



override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code

    nameText.delegate = self
    phoneText.delegate = self
    emailText.delegate = self
    genderText.delegate = self


override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)




    // Configure the view for the selected state


public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 



  //  let indexPath = tableView.indexPathForSelectedRow //optional, to get from any UIButton for example

    let currentCell = tableView.cellForRow(at: indexPath)! as UITableViewCell

    print(currentCell.textLabel!.text!)



func textFieldDidEndEditing(_ textField: UITextField) 
    let text = textField.text!

    if textField === nameText 
        data.name = text
     else if textField === phoneText 
        data.phone = text
     else if textField === emailText 
        data.email = text
     else if textField === genderText 
        data.gender = text
    



记得把struct Information改成class Information

【讨论】:

以上是关于如何在swift3中将每个tableViewcell数据发送到collectionview的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中将标题视图添加到每个自定义tableViewCells

Swift 3:如何将内容包装在具有多个标签的 tableviewcell 中?

如何在 UIStackView 中切换排列子视图的可见性,这在 tableViewCell swift3 中

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

如何在 Swift 3.0 中选择 JSON 输出到 TableViewCell 中?

如何在swift3中将字典插入Set?