从表视图保存数据

时间:2017-06-25 15:28:14

标签: ios swift3

我在核心数据中设置了实体,我希望保存用户选择的日期和日期选择器的时间:

例如enter image description here

我想在周一,周三,周五和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描述。

更多信息

一周的日期存储为UILabel,如下所示: enter image description here

尝试3:

  print(currentCell.contentView.description)

我还尝试添加一个导航控制器,在右上角添加一个保存按钮,但似乎也不起作用(出于某种原因,保存按钮位于左下角)。

非常感谢任何帮助!感谢。

2 个答案:

答案 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)
    }
}