OGeek|极客世界-中国程序员成长平台

标题: ios - 如何在 Swift 3 中将数据从所有 TableView Cell 传递到 CollectionView [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:10
标题: ios - 如何在 Swift 3 中将数据从所有 TableView Cell 传递到 CollectionView

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

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 = "hone"

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



Best Answer-推荐答案


我对你的问题有个想法。

第 1 步:创建新结构以保存信息。

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

第 2 步: 在class tableViewController中,新建变量:

var formData: [信息] = []

第 3 步:每次用户在 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)

第 4 步: 在 CollectionViewController 类中,声明新变量:

var formData: [Information] = []

第五步:为collectionView创建一个header:

|姓名 |电话 |电子邮件 |性别 |

第 6 步:collectionView 中的每个单元格:

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

第 7 步:

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

我不知道为什么你需要很多提交按钮来创建许多 Controller ,但让我们试试我的想法。

关于ios - 如何在 Swift 3 中将数据从所有 TableView Cell 传递到 CollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42663510/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4