如何让我的数组字典填充我的tableview?

时间:2017-10-14 07:05:53

标签: swift uitableview dictionary

我想我已经接近了,但我只需要一点方向来帮助完成。我想用我的数据填充tableview,但我很难过。

我有两个包含用户数据的词典数组:每日工作和每周工作。

数组#1:

let finalDailyJobsArray = [JobsAndHabits(name: "counters", multiplier: 1.0, assigned: "Sophie", order: 0),
                       JobsAndHabits(name: "bedroom", multiplier: 1.0, assigned: "Sophie", order: 1),
                       JobsAndHabits(name: "bathrooms", multiplier: 1.0, assigned: "Allan", order: 2),
                       JobsAndHabits(name: "laundry", multiplier: 1.0, assigned: "Mother", order: 3),
                       JobsAndHabits(name: "living room", multiplier: 1.0, assigned: "Father", order: 4),
                       JobsAndHabits(name: "dining room", multiplier: 1.0, assigned: "Father", order: 5),
                       JobsAndHabits(name: "dishes", multiplier: 1.0, assigned: "Allan", order: 6)]

阵列#2:

let finalWeeklyJobsArray = [JobsAndHabits(name: "wash windows", multiplier: 1.0, assigned: "Father", order: 1),
                        JobsAndHabits(name: "weed garden", multiplier: 1.0, assigned: "Father", order: 0),
                        JobsAndHabits(name: "sweep porch", multiplier: 1.0, assigned: "Father", order: 2),
                        JobsAndHabits(name: "clean pool", multiplier: 1.0, assigned: "Mother", order: 4),
                        JobsAndHabits(name: "dusting & cobwebs", multiplier: 1.0, assigned: "Sophie", order: 3)]

另外,我有两个变量也可以保存单个信息。

单变量:

let inspectionParent = "Mother"     // this is a daily job
let paydayParent = "Father"         // this is a weekly job

我想将这些内容放入一个包含每个用户的部分的tableview中。它看起来像这样:

users job list

正如您所看到的,我想出了如何从我的阵列中获取用户图像和用户名,以及如何确定要创建的部分数量,但我不能为我的生活做好准备弄清楚如何自定义cellForRowAt属性。

我想列出每个人的日常工作和他们名下的每周工作。我猜这个诀窍在于弄清楚如何使用indexPath.row功能迭代数组,但到目前为止我的努力还没有奏效。有人可以介入并帮助我吗?

我尝试过的事情:

尝试#1:我认为这是正确的方向,但我不确定如何让单元格进行协调,甚至不知道如何放置此代码。

let userNames2 = finalUsersArray.map({ return $0.firstName }).sorted()
let jobAssignments2 = finalWeeklyJobsArray.map({ return $0.assigned }).sorted()
let userNames3 = finalUsersArray.filter({ return $0.firstName == "Father" })

尝试#2:这在每个部分重复了相同的数据,这不是我想要的。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! JobSummaryCellB
    if User.finalUsersArray[indexPath.row].firstName == JobsAndHabits.finalWeeklyJobsArray[indexPath.row].assigned {
        cell.userNameLabel.text = JobsAndHabits.finalWeeklyJobsArray[indexPath.row].name
    }
    return cell

尝试#3:完全没有工作。

cell.userNameLabel.text = User.finalUsersArray.filter({ return $0.firstName == "Father" })

尝试#4:也没有工作(返回错误)

if JobsAndHabits.finalWeeklyJobsArray[indexPath.row].assigned == User.finalUsersArray[indexPath] {
        cell.userNameLabel.text = JobsAndHabits.finalWeeklyJobsArray[indexPath.row].name

我找到了这些文章,但无法弄清楚如何根据我的情况调整它们:article1article2article3

任何帮助都会很棒!

编辑#1:

这是我的numberOfSections方法:

func numberOfSections(in tableView: UITableView) -> Int {
    return User.finalUsersArray.count
}

我的viewForHeaderInSection方法:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! JobSummaryCell
    cell.headerImage.image = User.finalUsersArray[section].photo
    cell.headerLabel.text = User.finalUsersArray[section].firstName
    return cell
}

我的两个结构:

struct User {
    var photo: UIImage
    var firstName: String
    var birthday: Int
    var passcode: Int
    var gender: String
    var childParent: String
}

struct JobsAndHabits {
    var name: String
    var multiplier: Double
    var assigned: String
    var order: Int

    static var finalDailyJobsArray = [JobsAndHabits]()
    static var finalWeeklyJobsArray = [JobsAndHabits]()

    static var inspectionParent = ""
    static var paydayParent = ""
}

更新#2:如何填充finalUsersArray。

static func loadMembers() {
    let firebaseUser = FIRAuth.auth()?.currentUser
    let ref = FIRDatabase.database().reference().child("users").child(firebaseUser!.uid)
    ref.child("members").observeSingleEvent(of: .value, with: { (snapshot) in
        for item in snapshot.children {
            if let snap = item as? FIRDataSnapshot {
                if let value = snap.value as? [String : Any] {
                    let birthday = value["birthday"] as! Int
                    let childParent = value["childParent"] as! String
                    let firstName = value["firstName"] as! String
                    let gender = value["gender"] as! String
                    let passcode = value["passcode"] as! Int
                    let profileImageUrl = value["profileImageUrl"] as! String
                    // get images
                    let storageRef = FIRStorage.storage().reference(forURL: profileImageUrl)
                    storageRef.data(withMaxSize: 1 * 1024 * 1024, completion: { (data, error) in
                        let pic = UIImage(data: data!)
                        let user = User(photo: pic!,
                                        firstName: firstName,
                                        birthday: birthday,
                                        passcode: passcode,
                                        gender: gender,
                                        childParent: childParent)
                        finalUsersArray.append(user)
                    })
                }
            }
        }
    })
}

2 个答案:

答案 0 :(得分:1)

你必须这样使用:

my_spark

答案 1 :(得分:0)

因此,如果我了解您的问题,您只想自定义您的单元格在TableView中的显示方式。 首先,您必须为TableView指出2个信息:

  • 您想要多少个部分?在你的情况下,它将等于你拥有多少个人。
  

func numberOfSections(in:UITableView)询问数据源   返回表视图中的节数。

  • 每个部分需要多少行?在您的情况下,它将等于个人有多少工作。 (每日+每周工作)
  

func tableView(UITableView,numberOfRowsInSection:Int)告诉数据   source返回表的给定部分中的行数   视图。必需的。

然后,您需要自定义您的单元格:

  • 为自定义单元格创建一个类。您使用此标识符"customCell"但是您是否有一个类来表示您的单元格的设计?
  • 将自定义单元格类链接到情节提要表中的表格视图的原型单元格
  • 将自定义单元格中的插座和操作连接到自定义单元类
  • 最后在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell中使用您的商店配置您的单元格......