簡體   English   中英

使用Swift 4將Dictionary傳遞到表格視圖

[英]Passing Dictionary into table view using swift 4

I have Created two Dictionary of question and answer , and I have created two label in my table view for displaying question and their options serial wise , but after displaying the result into the table view it is shown as the given screenshot , help me to show these data in standard for of question and answer with options

*I have created Dictionary of two* 

`[Int:String]`and [Int:Array<String>] 
 , *and now I want access it in my Table view serially with dictionary1 in question label and dictionary2 in answer label;* 

Code --

        var dictionary1:[Int:String] = 
       [0:"Whether you have experienced Pricking-pain, Desquamation,itching or dry skin sensation during seasonal alternate.",
        1:"Whether your skin apt to flush( Redness) in hot humid environment ",
        2:"Whether your skin has multiple disernible dilated capillaries.",
        3:"whether you have once been diagnosed atopic dermatitis or seborrheic dermatitis."]

Dictionary2用於創建問題的選項

 var dictionary2 : [Int:Array<String>] = 
 [0:["Never","Seldom","Usually","Always"],
 1:["Never","Seldom","Usually","Always"],
 2:["Never","Seldom","Usually","Always"],
 3:["Yes", "No"]]


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


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    cell.questionLabel.text = dictionary1[indexPath.row]
        cell.questionLabel.textColor = UIColor.black
        let arr = dictionary2[indexPath.row]

        var strr = String()
        for str in arr! {
            strr = strr + str
        }
        cell.optionsLabel.text = strr
        cell.optionsLabel.textColor = UIColor.black

        return cell
    }

    }

//這是我的表格視圖的屏幕快照,它不是以多行顯示數據,並且選項和問題都重疊了

[![enter image description here][1]][1]
  1. 項目清單

    [1]: https//i.stack.imgur.com/Erpvq.png

將以下代表替換為您的代表:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
    // TO Display Single Dictionary Data
    cell.textLabel?.text = dictionary1[indexPath.row]


    // To display Array of string stored in dictionary
    cell.textLabel?.text = dictionary2[indexPath.row]?.joined(separator: "\n")

    return cell
}

對於第二個要求

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell

    // FOR FIRST DICTIONARY
    cell.lblFirst?.text = dictionary1[indexPath.row]

    // FOR SECOND DICTIONARY
    cell.lblSecond?.text = dictionary2[indexPath.row]?.joined(separator: "\n")

    return cell
}

注意:我想發表評論,但我也想分享這張圖片,所以我回答了,但這只是一個提示,而不是完整的答案。

  1. 您使用的函數將String數組作為輸入。 您可以通過按下選項鍵並單擊功能主體,在以下屏幕上查看所有功能。

在此處輸入圖片說明

  1. 您需要將密鑰作為字符串傳遞。 那么您的字典中的鍵類型必須為String。 將密鑰設為字符串后。

可能的解決方案是:

  1. 如果您將鍵保持為Int,則使用: dictionary1[indexPath.row]

    如果將密鑰作為字符串輸入,請使用: dictionary1["\\(indexPath.row)"]

  2. (僅在這種情況下)如果要僅以第0個元素,第1個元素等順序顯示它們,那么為什么不使用Array而不是Dictionary。

    arry = ["1st description","2nd description"]

然后使用

cell.label.text = arry[indexPath.row]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM