将TableCell插入正确的部分

时间:2017-02-27 17:37:42

标签: ios swift uitableview dictionary

我正在尝试将tableCell添加到TableView中的相应部分。我有一个索引的客户列表:

 var clients = Client.loadAllClients()     //Returns client array
 var contacts = [String: [Client]]()
 var letters: [String] = []    

当我进行索引时,联系人字典会返回:

 {A: [Client("Andrew")]}

字母数组返回:

 [A]

然后我使用它来索引整个客户端列表,并将它们放入带有节头的正确部分。这一切都运作良好。但是,我对如何将新客户端添加到此索引表中感到困惑,因此客户端的名称将与正确的节头标题对齐。

我正在使用 prepare 函数将新创建的Client对象传递回TableViewController,然后将其附加到客户端数组。我知道数组有信息,但我不能让单元格显示在表格中。通过一些研究我得出了这个:

    @IBAction func addNewClient(segue:UIStoryboardSegue) {
    let newClient = addNewClientData()
    let firstLetter = charToString(c: [getFirstLetter(s: newClient.lName)]).capitalized
    if !letters.contains(firstLetter) {
        letters.append(firstLetter)
        contacts[firstLetter] = [Client]()
        letters.sort()
    }
    let sectionIndex = Int(letters.index(of: firstLetter)!)
    self.tableView.beginUpdates()
    self.tableView.insertRows(at: [IndexPath(row: contacts[firstLetter]!.count - 1, section: sectionIndex)], with: .automatic)
    self.tableView.endUpdates()
    contacts[firstLetter]!.append(newClient)

}

此功能在" save"在不同的视图上按下按钮。我有对象,我很困惑如何将其插入到表中的正确索引和部分。运行时,我收到的部分数量无效。我正在使用xCode 8.0和Swift 3.0。如果我需要提供任何其他信息,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

我通过提出另一个问题找到了这个问题的答案。我字典的问题在于它是一本字典。虽然字典可用于索引和表,但数组更适合Swift和Xcode。解决方案是创建一个作为数组工作的数据结构。以下是数据结构解决方案的链接:

Filtering an Array inside a Dictionary - Swift

现在要插入一个新客户端:

let newClient = Client(lName: cLast)
    let firstLetter = newClient.getFirstLetter(s: cLast).capitalized
    for contact in contacts {
        if firstLetter == contact.letter {
            contact.add(client: newClient)
        } else {
            let tempContact = Contact(letter: firstLetter, clients: [newClient])
            contacts.append(tempContact)
            break
        }
    }
    indexClients()
    self.tableView.reloadData()