我创建了一个tableview,我有一个像这样的对象:
public class data: NSObject {
var name :String = ""
var number :Double = 0
var price : Double = 0
var sum:Double = 0
}
我创建了一个数组:
var data1 = [data]()
我有一个表格单元格:
@IBOutlet var a0: UITextField!
@IBOutlet var a1: UITextField!
@IBOutlet var a2: UITextField!
@IBOutlet var a3: UITextField!
var data1 : data? {
didSet {
var a00 = data1?.name
var a11 = data1?.number
var a22 = data1?.price
var a33 = a11! * a22!
a0.text = a00
a1.text = String(a11!)
a2.text = String(a22!)
a3.text = String(a33)
}
}
那么,当我在tableview中触摸按钮(如果我有一个按钮)时,如何重新加载数据?它是不同的文件,一个是Viewcontroller.swift,另一个是tableviewCell.swift,我怎么能这样做?
答案 0 :(得分:3)
创建一个这样的协议:
protocol ParentControllerDelegate{
func requestReloadTable()
}
在TableViewCell类中:
class ProjectCell: UITableViewCell{
var parentDelegate: ParentControllerDelegate?
// And whatever other things you require in the UITableViewCellClass
}
现在,当您使TableViewCell将Controller类指定为委托时:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableCellID") as! ProjectCell
cell.parentDelegate = self
}
此时,您可以从UITableViewCell类调用Controller对象中的protocol方法。 在UITableViewCell类中为您的按钮创建一个IBAction并调用:
delegate?.requestReloadTable()
在上面的代码中,requestReloadTable是控制器类中的一个方法,当你根据我们之前制作的协议确认控制器时,你必须覆盖它:
extension HomeController: ParentControllerDelegate{
func requestReloadTable() {
self.tableView.reloadData()
}
}
答案 1 :(得分:0)
为按钮创建IBOutlet,您可以更新表格。 并在行动中提出下一个代码:
self.tableView.reloadData()
EX:
@IBAction func upDateTable(_ sender: Any) {
self.tableView.reloadData()
}