如何在swift字典中使用带有数组(Dictionary <string,[string] =“”>)的定义来在tableview单元格中显示?

时间:2018-01-30 02:26:28

标签: ios swift tableview

首先,首先,我想做什么?好吧,我正在尝试运行类似于标签系统的东西,它使用字典String,[String]类型过滤掉帖子中的数据并将其显示在屏幕上。我已经在控制台级别上解决了这个问题,但我很难理解如何使用它来实现这一点,这有点奇怪。我尝试并在UI中返回nil,但在控制台级别上运行完美。

简化。我希望快速标签过滤的数组显示在tableview

我再次重复这个,控制台工作得很完美,但UI变得古怪并且返回nil或者为零。好的,这是代码。

不是100%确定这个区域会导致问题,但我在这里显示以防万一。

//this is the part where I add the stuff into the console
//and add the dictionary part.
@IBAction func ReplyAction(_ sender: UIButton) {

        if !(TextFieldForComments.text?.isEmpty)! && TextFieldForComments.text != nil
        {
            CommentGlobals.shared.addToCommentSection(newElement: TextFieldForComments.text!)
            let tagCheck = TextViewForComment.text
            if  !quickTags.FilteredComments.keys.contains(TextViewForComment.text){
                quickTags.FilteredComments.updateValue(["\(String(describing: TextFieldForComments.text))"], forKey: tagCheck!)
                print("Hey here is the dictinary you wanted \(quickTags.FilteredComments)")
            }
            else {
                quickTags.FilteredComments[tagCheck!]?.append(CommentGlobals.shared.commentSection.last!)
                print("Hey here is the dictinary you wanted wo wo \(quickTags.FilteredComments)")
            }
            TextFieldForComments.text = ""


            //this line of code is important or it
            //won't insert the table view right.
            CommentFeed.insertRows(at: [IndexPath(row: CommentGlobals.shared.commentSection.count-1, section: 0)], with: .automatic)
        }

这是问题区域

//this is the problem area
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let ceal = CommentFeed.dequeueReusableCell(withIdentifier: "commentFeed", for: indexPath)

        //guard let selectedDictionary = quickTags.FilteredComments["\(TextViewForComment)"] else {return ceal}

//this is the part that works, but noted it out for reference
//this doesn't work for what I am trying to do because
//I don't want to display the comments of every view 
        //ceal.textLabel?.text = "\(CommentGlobals.shared.commentSection[indexPath.row])"



 //this is failure. I also tried another way ,but it just printed nil 
    //on to the UI
            //ceal.textLabel?.text =  "\(selectedDictionary[indexPath.row])"


        return ceal
    }

好的,如果您需要更多信息,请告诉我。

哦,是的,我不能说这完全可以在控制台级别上运行,但是当我试图将它放到用户界面时却不行。

我还将快速标签存储在一个静态数组中,然后将其余部分存储在一个单独的

这是预期的输出(UI)

comment
comment
comment

当前输出就像这样(UI)

 (it does nothing, runs nil, or crashes)

其他一些消息来源导致事情就像这样

comment comment comment

所有这些都在同一条线上而不是我想要的。

func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
//        return CommentGlobals.shared.commentSection.count
        print(quickTags.FilteredComments.count)
        return CommentGlobals.shared.commentSection.count
    }

1 个答案:

答案 0 :(得分:0)

UITableView不包含自己的数据集,而是从dataSource获取。 insertRows(at:, with:)仅适用于单元格动画,应包含begin / endUpdates()

class ViewController: UITableViewDataSource {
    @IBAction func ReplyAction(_ sender: UIButton) {
        // ...
        CommentFeed.beginUpdates()
        CommentFeed.insertRows(at: [IndexPath(row: CommentGlobals.shared.commentSection.count - 1, section: 0)], with: .automatic)
        CommentFeed.endUpdates()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return CommentGlobals.shared.commentSection.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "commentFeed", for: indexPath)
        cell.textLabel?.text = CommentGlobals.shared.commentSection[indexPath.row]
        return cell
    }
}

编辑:请注意,您的数据集的行数和部分数必须与动画结束时的预期结果相匹配,否则在调用endUpdates()时会出现异常。