所以,我有一个显示课程的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()!
答案 0 :(得分:0)
请勿尝试搜索单元格。嗯,你可以,但不是像你想要的那样 - 我会回到那里。
您当前的代码正在创建新单元格,而不是查找现有单元格,因此无法正常工作。
您应该做的是存储返回对象数组qObjects
,然后在配置单元格进行显示检查时是否包含当前单元格的对象。如果是,请勾选,否则删除勾号。
现在,如果在显示视图后发生qObjects
的加载,则有2个选项:
选项2.显然更好,特别是如果用户可能正在滚动列表。为此,您希望在表视图上使用通过调用indexPathsForVisibleRows
返回的数组。然后,迭代该列表,获取关联的对象并检查它是否在qObjects
中,然后使用cellForRowAtIndexPath:
显示该单元格并更新它。