如何使用sectionNameKeyPath(Swift)对tableView数据进行分组

时间:2015-06-03 18:18:53

标签: ios swift uitableview

我无法弄清楚如何在Swift中执行以下操作并寻找指针。

我从Core Data中提取字符串值并在UITableView中显示它们......它们正在工作并显示所有条目。我现在想要' group'按日期创建的这些值(也存储在Core Data中)但是我很难实现这个组头...这里有我所拥有的:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var sound = self.sounds[indexPath.row]
    var cell = UITableViewCell()

    // Convert Date to String
    var formatter: NSDateFormatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd-HH-mm-ss"
    let dateTimePrefix: String = formatter.stringFromDate(sound.dateSaved)
    // Display the following in each rows
    cell.textLabel!.text = sound.name + " Saved: " + dateTimePrefix

    return cell
}

有人能指出我正确的方向,如何实施标题'?我已经在我的Main.storyboard设置中将tableView设置为' Grouped'作为一种风格。

---更新

感谢下面的回复,不幸的是,这些例子都是在Obj-C中,而我是为了迅速拍摄。

要扩展,我有以下从Core Data检索数据并在UITableView中显示所有内容:

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.dataSource = self
    self.tableView.delegate = self
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
    var request = NSFetchRequest(entityName: "Sound")
    self.sounds = context.executeFetchRequest(request, error: nil)! as [Sound]
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.sounds.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
    var sound = self.sounds[indexPath.row]

    // Convert Date to String
    var formatter: NSDateFormatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd @ HH:mm:ss"
    let dateTimePrefix: String = formatter.stringFromDate(sound.dateSaved)
    // Display the following in each rows
    cell.textLabel!.text = sound.name // Sound Name
    // Display the following as each subtitles
    cell.detailTextLabel!.text = dateTimePrefix // Sound Duration (Currently 'date')

    return cell
}

有人能指出我正确的方向,如何分组'分组'每个月都有一个月的'使用sectionNameKeyPath的标头,我相信?具体而言,需要修改哪一段代码以将列表分解为“#”;

1 个答案:

答案 0 :(得分:0)

以下是一些提示:

  1. 您需要使用cellclick: function(view, td, cellIndex, record, tr, rowIndex, e, eOpts ){ console.info(view.getGridColumns()[cellIndex].dataIndex); if(view.getGridColumns()[cellIndex].dataIndex === 'someCol'){ //do something } } (" FRC") - 请查看documentation here。初始化FRC时,您会看到指定NSFetchedResultsController

  2. 有使用FRC更新tableView的样板代码。获得这个并观察FRC如何工作的最简单方法是使用Apple的Master / Detail应用程序模板创建项目,确保您选择"使用核心数据"选项。在该项目中使用它来查看它是如何工作的,然后剪切/粘贴到您自己的项目中。

  3. 在您的情况下,您希望将sectionNameKeyPath(并且可能是month?)作为部分名称。有几种方法可以做到这一点,但最简单的方法是在year类中创建一个函数(例如。sectionIdentifier),它返回一个带有节名称的字符串,格式为您想要的,派生的来自Sound。然后在初始化FRC时指定dateSaved