这似乎是一个相当独特的问题,我希望有人可以提供一些见解或潜在的解决方案。我正在尝试为婚礼创建一个RSVP应用程序。目前,当客人登录并访问RSVP屏幕时,会向他们出示每个活动的受邀家庭成员(见下文):
您在上面的屏幕截图中看到的复选标记是手动输入的(即未从数据库中检索)。我正在尝试检索每个邀请(或不邀请)的每个活动的每个事件的真/假值,如果邀请了访客,则在其名称旁边放置一个复选标记。以下是Parse数据库的屏幕截图 -
使用“objectArray” -
在tableView中填充了每个事件的来宾名称这是我从(\ event)RSVP数据库中检索的内容,并将其存储在“checked”数组中:
基本上,前四个值是“Guest 1”,接下来的四个是“Guest 2”等,这导致为错误的guest虚拟机显示一个复选标记(两个数组似乎不匹配 - 一个对键进行排序:事件上的值,另一个是每个来宾RSVP状态的有序列表)。
我认为这里有两种可能的解决方案: 1)以与“objectArray”相同的顺序创建“checked”数组 2)找到一种在cellForRowAtIndexPath
中的正确行中显示复选标记的方法如果任何人都可以提供简单的解决方案或解释,那将非常有帮助。谢谢!以下是我的代码:
import UIKit
import Parse
class RSVPTableViewController: UITableViewController {
var checked = [Bool]()
var guestList = [String : [String]]()
let eventList = ["Hindu", "Reception", "Sangeet", "Tibetan"]
struct Objects {
var sectionName : String!
var sectionObjects : [String]!
}
var objectArray = [Objects]()
override func viewDidLoad() {
super.viewDidLoad()
for event in eventList { guestList[event] = [String]() }
let query = PFQuery(className:"GuestList")
query.whereKey("Family", equalTo: "Family1")
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if let family = objects {
for guest in family {
for event in self.eventList {
if let RSVP = guest.valueForKey("\(event)RSVP") as? Bool {
self.checked.append(guest.valueForKey("\(event)RSVP") as! Bool)
}
if let invited = guest.valueForKey("\(event)Invite") as? Bool {
if invited {
self.guestList[event]!.append(guest.valueForKey("GuestName") as! String)
}
}
}
}
for (key, value) in self.guestList {
self.objectArray.append(Objects(sectionName: key, sectionObjects: value))
}
//Reload Table View!
self.tableView.reloadData()
print(self.checked)
print(self.objectArray)
}
} else {
print(error)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return objectArray.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return objectArray[section].sectionObjects.count
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return objectArray[section].sectionName
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
/*
Check Mark Code Required
*/
cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row]
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
/*
Check Mark Code Required
*/
cell.accessoryType = .Checkmark
}
}
}
UPDATE:根据Parse中的值,“Sangeet”列是唯一具有“true”值的列,这意味着表中“Sangeet”部分下列出的来宾应该有复选标记(没有其他人)。
答案 0 :(得分:0)
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
if self.checked[indexPath.section*tableView.numberOfSections+indexPath.row]{
cell.accessoryType = .Checkmark
}else{
cell.accessoryType = .None
}
cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row]
return cell
}