Parse和Swift。从Parse关系设置tableViewCell附件类型

时间:2015-06-04 11:50:04

标签: ios uitableview parse-platform

所以,我有一个显示课程的tableView。用户可以在这些课程(单元格)上设置Checkmarks,并将它们保存在PFUser对象中,作为与Courses类(存储所有课程)的关系。 我的问题是,如何勾选用户之前已保存过的课程。

这是我的尝试,但我不知道如何继续。如何获取具有特定标签的单元格? (或者有更好的方法吗?)

events: function (start, end, timezone, callback) {
 $.ajax({
                        url : '@Url.Action("GetEvents","FullCalender")',
                        dataType: "json",
                        data: {
                            start: start.unix(),
                            end: end.unix()
                        },
                        success: function (doc) {
                                var events = [];
                                $.each(doc, function (i, item) {
                                //alert(item["title"]);
                                    events.push({
                                             title: $(this).attr('title'),
                                             start: $(this).attr('start'), // will be parsed
                                             end: $(this).attr('end')
                                           });
                                     });
                                        callback(events);
                               }
                    });
                }

编辑:该代码位于我的覆盖viewDidLoad

EDIT2:

    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    let qObjects :Array = query!.findObjects()!
    println(qObjects)
    for var qObjectsCount = qObjects.count; qObjectsCount > 0; --qObjectsCount {
        var qAnObject: AnyObject = qObjects[qObjectsCount - 1]
        var courseName = qAnObject["coursename"]
        println(courseName)
        if let cell: AnyObject? = tableView.dequeueReusableCellWithIdentifier("courseCell"){

        }

    }

行中出错,如果包含(qObjects,object){'

  

通用参数'S.Generator.Element'不能绑定到非@objc协议类型'AnyObject'

EDIT3:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("courseCell") as! PFTableViewCell!
    if cell == nil {
        cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "courseCell")
    }

    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    let qObjects :Array = query!.findObjects()!


    // Extract values from the PFObject to display in the table cell
    if let courseName = object?["coursename"] as? String {
        cell?.textLabel?.text = courseName


        if contains(qObjects, object) {
            cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
        }
    }

    return cell
}

EDIT4 :(工作代码)

在课堂上:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("courseCell") as! PFTableViewCell!
    if cell == nil {
        cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "courseCell")
    }

    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    let qObjects :Array = query!.findObjects()!


    // Extract values from the PFObject to display in the table cell
    if let courseName = object?["coursename"] as? String {
        cell?.textLabel?.text = courseName
        cell.tintColor = UIColor.blackColor()
    }

    if contains(qObjects, { $0 === object }) {
        cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
        self.selectedRows.addIndex(indexPath.row)
    }else{
        cell?.accessoryType = UITableViewCellAccessoryType.None
    }

    return cell
}

在我的objectsDidLoad中:

// Initializing qObject variable 
var qObjects :Array<AnyObject> = []

在我的tableView(cellForRowAtIndexPath)中:

    // Get PFObjects for the checkmarks on courses the currentUser has already selected before
    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    qObjects = query!.findObjects()!

1 个答案:

答案 0 :(得分:0)

请勿尝试搜索单元格。嗯,你可以,但不是像你想要的那样 - 我会回到那里。

您当前的代码正在创建新单元格,而不是查找现有单元格,因此无法正常工作。

您应该做的是存储返回对象数组qObjects,然后在配置单元格进行显示检查时是否包含当前单元格的对象。如果是,请勾选,否则删除勾号。

现在,如果在显示视图后发生qObjects的加载,则有2个选项:

  1. 重新加载表格视图
  2. 仅更新可见项
  3. 选项2.显然更好,特别是如果用户可能正在滚动列表。为此,您希望在表视图上使用通过调用indexPathsForVisibleRows返回的数组。然后,迭代该列表,获取关联的对象并检查它是否在qObjects中,然后使用cellForRowAtIndexPath:显示该单元格并更新它。