изменить содержимое ячейки табличного представления при выборе ячейки представления коллекции - PullRequest
0 голосов
/ 20 июня 2019

У меня есть tableView и collectionView в одном контроллере вида.

в tableView У меня есть описание заголовка и в collectionView у меня lable.

Я хочу collectionView выбор метки tableView содержимое должно измениться.

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Bookmark.count
    }


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionViewBookmark.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BookMarkCollectionViewCell



    cell.lblTitle.text = Bookmark[indexPath.row]
    cell.backgroundColor = UIColor.white



    return cell
}


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let cell = collectionViewBookmark.cellForItem(at: indexPath)

        cell?.backgroundColor = UIColor.blue

        self.selectedIndexPath = indexPath
//
        let newsDict = arrNewsData[indexPath.row]

        if (indexPath.row == 1)
        {
        let cell1 = tableViewBookMark.cellForRow(at: indexPath) as! BookMarkFirstTableViewCell
        cell1.lblTitle.text = newsDict["title"] as! String
        tableViewBookMark.reloadData()
        }
        tableViewBookMark.reloadData()
    }

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

        let dict = arrNewsData[indexPath.row]


        cell.lblTitle.text = dict["title"] as! String
      // cell.imgBookMark.image = dict["image_url"]
        let url = URL(string: dict["image_url"] as! String)
        URLSession.shared.dataTask(with: url!) { (data, response, error) in
            if data != nil{
                DispatchQueue.main.async {
                    let image = UIImage(data: data!)
                    cell.imgBookMark.image = image
                }
            }
        }.resume()
         return cell
    }

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы перезагружаете tableView после обновления значений в ячейке,

tableViewBookMark.reloadData() 

Это вызовет функцию источника данных, включая cellForRowAt, поэтому вы потеряете обновленные значения, решение дляэто означает наличие глобальной переменной в UIViewController, проверку ее значений внутри cellForRowAt и обновление ее в collectionView DidSelect.

Дополнительный совет : вам не нужно перезагружать все tableView для одного изменения, вы можете использовать

tableView.reloadRows(at: [indexPath], with: .top) 

, чтобы перезагрузить только количество выбранных ячеекв tableView

1 голос
/ 20 июня 2019

Смотрите мои встроенные комментарии.

var tempCell: BookMarkFirstTableViewCell?

//Inside cellForRowAt indexPath

tempCell = cell
//Inside (collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

tempCell.lblTitle.text = newsDict["title"] as! String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...