简体   繁体   中英

How to send each tableViewcell data to collectionview in swift3

I have created dynamic forms, user enter number of forms, and i have created table cell for that. After submitting the all forms, all details should show in excel formate, for that i have created collection view but issue is that the only selected cell value is printing. I use this for 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.I Entered number of form i want

在此输入图像描述

2. no of forms displayed and i entered all different values for all different forms

在此输入图像描述

3.But what happening is only one form details are printing

在此输入图像描述

You shouldn't get your data in public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

Because when you scroll up / down, this func will call again and again.

 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

}

And in myTableViewCell class, you should change to

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
    }
}

}

Remember change struct Information to class Information

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM