我有动态填充原型单元的数据。 它只会创建所需数量的数据单元。 单击UIButton时,我遇到的问题是将数据传递到详细信息视图。
在每个动态单元格中都有一个UIButton,按下该按钮将把所选单元格中的所有数据传递到详细信息视图中。
将数据加载到表格视图中没有问题,我无法正确传递值。
这是我在以下位置的单元格
:override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "part", for: indexPath) as! partsTableCell
let part = partList[0]
cell.a.text = String(part.a)
cell.b.text = part.b
cell.c.text = part.c
cell.d.text = part.d
cell.e.text = part.e
cell.f.text = part.f
self.tableView.rowHeight = 250
cell.layer.borderColor = UIColor.darkGray.cgColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 5
cell.clipsToBounds = true
//tried using tags, but no luck
//cell.myButton.tag = indexPath.row
return cell
}
为了全面,我为表格单元格设置了一个自定义类。
class partsTableCell: UITableViewCell {
@IBOutlet weak var a: UILabel!
@IBOutlet weak var b: UILabel!
@IBOutlet weak var c: UILabel!
@IBOutlet weak var d: UILabel!
@IBOutlet weak var e: UILabel!
@IBOutlet weak var f: UILabel!
@IBOutlet weak var myButton: UIButton!
}
这是我要传递数据的地方:
func prepare(for segue: UIStoryboardSegue, sender: UIButton) {
if (segue.identifier == "partDetail") {
let detailVC = segue.destination as? PartsVCDetail
let indexPath = self.tableView.indexPathForSelectedRow
let part = dataList[indexPath.row]
detailVC?.a = part.a!
detailVC?.b = part.b!
detailVC?.c = part.c!
detailVC?.d = part.d!
detailVC?.e = part.e!
detailVC?.f = part.f
}
}
一切正常,但是当我单击按钮并执行搜索时。另一边的数据为空白或为零。
我缺少明显的东西吗?
任何帮助都会很棒!
谢谢
编辑-
这就是我设置详细资料VC的方式
@IBOutlet weak var qq: UILabel!
@IBOutlet weak var ww: UILabel!
@IBOutlet weak var ee: UILabel!
@IBOutlet weak var rr: UILabel!
@IBOutlet weak var tt: UILabel!
@IBOutlet weak var yy: UILabel!
@IBOutlet weak var uu: UILabel!
var a: Int64!
var b: String = ""
var c: String = ""
var d: String = ""
var e: String = ""
var f: String = ""
var g: String = ""
override func viewDidLoad() {
super.viewDidLoad()
//lineNumber.text = "test"
print(a,"************")
print(b, "************")
print(c, "************")
print(d, "************")
print(e, "************")
print(f,"************")
//ALL DATA ABOVE IS EITHER NULL OR EMPTY
qq.text = a as! String
ww.text = b
ee.text = c
rr.text = d
tt.text = e
yy.text = f
uu.text = g
}
答案 0 :(得分:3)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "part", for: indexPath) as! partsTableCell
let part = partList[0]
cell.a.text = String(part.a)
cell.b.text = part.b
cell.c.text = part.c
cell.d.text = part.d
cell.e.text = part.e
cell.f.text = part.f
self.tableView.rowHeight = 250
cell.layer.borderColor = UIColor.darkGray.cgColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 5
cell.clipsToBounds = true
// give tag to your button and add target
cell.myButton.tag = indexPath.row
cell.myButton.addTarget(self, action: #selector(myButtonAction), for: .touchUpInside)
return cell
}
@objc func myButtonAction(sender:UIButton) {
// in button action do your stuff like below
let part = partList[sender.tag]
let detailVC = UIStoryboard(name: "YourStoryBoard", bundle: nil).instantiateViewController(withIdentifier: "partDetail") as! PartsVCDetail
detailVC?.a = part.a!
detailVC?.b = part.b!
detailVC?.c = part.c!
detailVC?.d = part.d!
detailVC?.e = part.e!
detailVC?.f = part.f
self.navigationController?.pushViewController(detailVC, animated: true)
}