【发布时间】:2018-06-25 15:50:09
【问题描述】:
我正在尝试使用日期选择器根据日期搜索我的表格视图,但由于某种原因表格没有更新。
目标是显示仅与从日期选择器中选择的日期匹配的单元格。 这是我的表格视图代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
let client = clinetarr[indexPath.row]
var output: String = ""
var resp: String = ""
var datee: String = ""
var index: String = ""
cell.message.numberOfLines=0
if let i = client["index"] as? String {
index = "\(i) " //using space as separator
}
if let date = client["date"] as? String {
datee = "\(date) " //using space as separator
}
if let response = client["response"] as? String {
resp = "\(response) "
}
if let message = client["message"] as? String {
output = message
}
cell.indextnumber.text = index
cell.response.text = resp
cell.date.text = datee
cell.message.text = output
return cell
}
这是我的日期选择器代码和完成按钮功能
func createDatePicker() {
let toolbar = UIToolbar()
toolbar.sizeToFit()
let done = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donebuttom))
toolbar.setItems([done], animated: false)
dateField.inputAccessoryView = toolbar
dateField.inputView = picker
picker.datePickerMode = .date
}
@objc func donebuttom() -> UITableViewCell{
var output: String = ""
var resp: String = ""
var datee: String = ""
var index: String = ""
// format date
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let dateString = formatter.string(from: picker.date)
let indexPath = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
let client = clinetarr[indexPath.row]
dateField.text = "\(dateString)"
if let date = client["date"] as? String {
let dateee = "\(date) "
let last = dateee.prefix(10)
if last == dateString{
if let i = client["index"] as? String {
index = "\(i) "
}
if let date = client["date"] as? String {
datee = "\(date) " //using space as separator
}
if let response = client["response"] as? String {
resp = "\(response) "
}
if let message = client["message"] as? String {
output = message
}
tableView.reloadData()
}
else{
resp=""
tableView.reloadData()
}
}
cell.indextnumber.text = index
cell.response.text = resp
cell.date.text = datee
cell.message.text = output
tableView.reloadData()
self.view.endEditing(true)
return cell
}
由于某种原因,表格没有更新 提前致谢
感谢我解决的每一个答案。 特别感谢 Duncan C,答案很简单,但我猜我的大脑被炸了。
【问题讨论】:
-
在你的函数 donebuttom() 中,你应该操作 UITableViewDataSource (Array "clientarr") 而不是返回 UITableViewCell。
-
你能解释更多或者举个例子吗?
-
每次调用 tableView.reloadData() 时都会调用方法 cellForRow:at:。从 doneButtom() 返回一个 UITableViewCell 并不重要(你甚至没有使用这个 UITableViewCell)。您将需要另一个 dataSource-Array(如“filteredClientArr”)+ cellForRow:at: 中的一些逻辑来使用正确的数组,这取决于您是否需要过滤列表。或者你需要操纵你的“clientarr”来整理你不需要的条目。
-
我做了新的数组,但我是新的 tableview。单击完成按钮后,如何使用新数组更新表格视图?
标签: swift uitableview uisearchbar uidatepicker