Как добавить данные в конец метки в swift 4.0 - PullRequest
0 голосов
/ 23 марта 2019

У меня есть табличное представление с вариантами продуктовых товаров с ценой, которые хранятся в словаре.

Как только пользователь выбирает строку из таблицы, имя и цена товара добавляются в словарь и печатаются в консоли.

Проблема в том, что я пытаюсь также отобразить название товара и цену в ярлыке, чтобы пользователь мог его увидеть, но я не могу заставить его работать, потому что когда я перебираю данные в товарах каждый раз, когда пользователь нажимает на новую строку, ярлык перезаписывает вместо добавления в новую строку.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    var items : Dictionary<Int, String> = [:]


    @IBOutlet weak var groceryTable: UITableView!{
        didSet {
            groceryTable.dataSource = self
        }
    }

    var groceryData:Dictionary<String, String> = ["Apple":"1", "Kiwi":"2", "Mango":"4", "Broccoli":"3","Milk":"4", "Eggs":"3", "Bread":"6"]


    @IBOutlet weak var label: UILabel!

    //selection of row handler
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Item added!")
        let currentCell = tableView.cellForRow(at: indexPath) as! UITableViewCell
        let val = currentCell.textLabel!.text
        items.updateValue(val!, forKey: indexPath.row)
        print(items)


        for data in items{
            let value = data.value
            let line = "\n"
            var a = ""
            a.append(value + line)
            self.label.text=a


        }
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        print("Item removed!")
        items.removeValue(forKey: indexPath.row)
        print(items)
    }



    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return groceryData.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        let key = Array(self.groceryData.keys)[indexPath.row]
        let value = Array(self.groceryData.values)[indexPath.row]

        cell.textLabel?.text = key + ", $"+value
        return cell
    }



    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

Фактический результат, метка перезаписывается с каждым новым щелчком строки: Яйца, $ 3

Ожидаемое: Манго, 4 доллара Хлеб, 6 долларов Яйца, $ 3

Ответы [ 2 ]

3 голосов
/ 23 марта 2019

Вам нужно

 self.label.text = self.label.text! + items.map { $0.value }.joined(separator:"\n")
0 голосов
/ 23 марта 2019

Закончилось получением ответа!

for data in items{
            let value = data.value
            label.text = label.text! + value + "\n"
            items.removeValue(forKey: data.key)
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...