如何在swift3中将每个tableViewcell数据发送到collectionview
Posted
技术标签:
【中文标题】如何在swift3中将每个tableViewcell数据发送到collectionview【英文标题】:How to send each tableViewcell data to collectionview in swift3 【发布时间】:2017-03-16 03:59:50 【问题描述】:我创建了动态表单,用户输入了表单数量,并且为此创建了表格单元格。提交所有表单后,所有详细信息都应以 excel 格式显示,因为我已经创建了集合视图,但问题是唯一选择的单元格值正在打印。 我将它用于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.我输入了我想要的表格编号
2。没有显示的表单,我为所有不同的表单输入了所有不同的值
3.但是发生的只是一个表单细节正在打印
【问题讨论】:
嗨。您说“问题是唯一选定的单元格值正在打印”。你能显示你选择单元格时使用的代码吗 @Luan 你好,我已经发布了我的屏幕截图,所以你会有想法 @LuanTran 你能解决吗? 当您点击提交按钮时,您是否要备份和收集数据? 没有。我想要的是,假设我填写 3 个不同的表单并点击提交按钮,所有值都应该打印 【参考方案1】:您不应该在public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
中获取您的数据
因为当你向上/向下滚动时,这个函数会一次又一次地调用。
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
在myTableViewCell
类中,您应该更改为
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
记得把struct Information
改成class Information
【讨论】:
以上是关于如何在swift3中将每个tableViewcell数据发送到collectionview的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中将标题视图添加到每个自定义tableViewCells
Swift 3:如何将内容包装在具有多个标签的 tableviewcell 中?
如何在 UIStackView 中切换排列子视图的可见性,这在 tableViewCell swift3 中
如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?