简体   繁体   中英

How to pass data from all TableViewCell 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.

class tableViewController: UIViewController, UITableViewDataSource,UITableViewDelegate {

    @IBOutlet var nameText: UITextField!
    @IBOutlet var tableView: UITableView!

    var shop = Int()
    var namevalue = [String]()
    var phoneValue = String()
    var emailValue = String()
    var genderValue = String()
    var isSelectAll = false;
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    {
        return shop
    }


    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

        if(isSelectAll==true)
        {
            cell.backgroundColor = UIColor.blue;
        }
        else
        {
            cell.backgroundColor = UIColor.white;
        }
        cell.formNoLabel.text = j

        for _ in 0..<shop{

        print(cell.nameLabel.text as Any)
        }

        if indexPath.section == 0{
            if indexPath.row == 0{
                print(cell.emailText.text as Any)

            }
        }

        for shop in 0..<(indexPath.count){

            let thisPath = indexPath[shop]
            print(thisPath as Any)
        }

              return cell
    }      public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {



    let indexPath = tableView.indexPathForSelectedRow //optional, to get from any UIButton for example
    for _ in 0..<shop {

         let currentCell = tableView.cellForRow(at: indexPath!)! as! myTableViewCell
      print(currentCell.self.nameText.text as Any)


    }
        let currentCell = tableView.cellForRow(at: indexPath!)! as! myTableViewCell
        print(currentCell.self.emailText.text as Any)
     namevalue.append(currentCell.nameText.text!)
       // namevalue =  [currentCell.nameText.text!]
        phoneValue = currentCell.phoneText.text!
        emailValue =  currentCell.emailText.text!
        genderValue =  currentCell.genderText.text!


         @IBAction func submitButton(_ sender: Any) {
          let mainController : CollectionViewController = CollectionViewController(nibName: "CollectionViewController", bundle: nil)
        mainController.getShop = shop+1
        mainController.getName = namevalue
         mainController.getPhone = phoneValue
         mainController.getEmail = emailValue
         mainController.getGender = genderValue

          self.navigationController?.pushViewController(mainController, animated: true)
      //  self.present(mainController, animated: true, completion: nil)


    }

    @IBAction func Select(_ sender: Any) {
        isSelectAll = true;//on button action
        print(namevalue)
        self.tableView.reloadData()//on button action 
    }
}

class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate** 

    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 {

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

I have an idea for your problem.

Step 1 : Create new struct to save information.

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

Step 2 : In class tableViewController , create new variable:

var formData: [Information] = []

Step 3 : Each time user enter one form at cell in tableView:

let name = cell.nameText.text!
let phone = cell.phoneText.text!
let email = cell.emailText.text!
let gender = cell.genderText.text!

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

formData.append(data)

Step 4: In class CollectionViewController, declare new variable:

var formData: [Information] = []

Step 5: Create a header for collectionView:

| Name | Phone | Email | Gender |

Step 6: Each cell in collectionView:

| formData[indexPath].name | formData[indexPath].name | formData[indexPath].name | formData[indexPath].name |

Step 7 :

@IBAction func submitButton(_ sender: Any) {
   mainController.formData = formData.
  // do somethings
...
}

I don't know why you need a lot submit buttons to create many controllers, but let try my idea.

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