我在核心数据中设置了实体,我希望保存用户选择的日期和日期选择器的时间:
我想在周一,周三,周五和22:07保存。我可以将日期选择器连接到viewcontroller来获取时间。但是,如何保存所选日期?
尝试1:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let indexPath = tableView.indexPathForSelectedRow
let currentCell = tableView.cellForRow(at: indexPath!)! as UITableViewCell
print(currentCell.textLabel!.text)
}
返回零
尝试2
print("You selected \(indexPath.row.description)")
成功返回单元格的行号,但不返回UIlabel描述。
更多信息
尝试3:
print(currentCell.contentView.description)
我还尝试添加一个导航控制器,在右上角添加一个保存按钮,但似乎也不起作用(出于某种原因,保存按钮位于左下角)。
非常感谢任何帮助!感谢。
答案 0 :(得分:2)
tableView:didSelectRowAt
同样适用于动态和静态单元格。
使用方法indexPathsForSelectedRows
(复数)获取所有当前选定的索引路径,然后使用数组获取工作日,而不是从单元格中收集信息。
代码将第0部分的索引路径映射到它们的行,并将行映射到相应的工作日。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
if let selectedRows = tableView.indexPathsForSelectedRows {
let rows = selectedRows.filter {$0.section == 0}.map{ $0.row}
let filteredWeekdays = rows.map{ weekdays[$0] }
print(filteredWeekdays)
}
}
如果您想捕获也取消选择单元格,请使用tableView:didDeselectRowAt
中的相同代码
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedWeekdays()
}
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
selectedWeekdays()
}
func selectedWeekdays()
{
let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
if let selectedRows = tableView.indexPathsForSelectedRows {
let rows = selectedRows.filter {$0.section == 0}.map{ $0.row}
let filteredWeekdays = rows.map{ weekdays[$0] }
print(filteredWeekdays)
}
}
考虑在Core Data中保存工作日的索引而不是字符串值。然后你可以直接使用行。
答案 1 :(得分:0)
我正在使用重用标识符..周一,周二等。我还创建了一个数组来保存选定的值。最后一定要实现didDeselectRow,从数组中删除值。
import UIKit
class NewTableViewController: UITableViewController {
@IBOutlet weak var monday: UILabel!
@IBOutlet weak var tuesday: UILabel!
@IBOutlet weak var wednesay: UILabel!
var selectedDays: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let identifier = tableView.cellForRow(at: indexPath)?.reuseIdentifier as! String
print(identifier)
switch identifier {
case "Monday":
selectedDays.append(identifier)
case "Tuesday":
selectedDays.append(identifier)
case "Wednesday":
selectedDays.append(identifier)
default:
return
}
print(selectedDays.count)
}
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let identifier = tableView.cellForRow(at: indexPath)?.reuseIdentifier as! String
print(identifier)
switch identifier {
case "Monday":
selectedDays.remove(at: indexPath.row)
case "Tuesday":
selectedDays.remove(at: indexPath.row)
case "Wednesday":
selectedDays.remove(at: indexPath.row)
default:
return
}
print(selectedDays.count)
}
}