如何将数据从所有TableViewCell传递到Swift3中的CollectionView

时间:2017-03-08 05:16:17

标签: ios swift swift3

我创建了动态表单,用户输入表单数量,并为此创建了表格单元格。提交所有表格后,所有细节都应以excel格式显示,因为我已创建了集合视图,但问题是唯一选定的单元格值是打印。

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

1 个答案:

答案 0 :(得分:0)

我对你的问题有所了解。

第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: [Information] = []

第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] = []

第5步:为collectionView创建标题:

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

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

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