簡體   English   中英

如何在Swift3中將數據從所有TableViewCell傳遞到CollectionView

[英]How to pass data from all TableViewCell to CollectionView in Swift3

我創建了動態表單,用戶輸入了許多表單,並且為此創建了表格單元。 提交所有表格后,所有詳細信息都應以excel formate格式顯示,因為我已經創建了集合視圖,但問題是唯一選擇的單元格值正在打印。

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 :創建新結構以保存信息。

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 |

第七步

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

我不知道為什么您需要很多提交按鈕來創建許多控制器,但讓我嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM