#ios #swift #uitableview #uicollectionview
#iOS #swift #uitableview #uicollectionview
Вопрос:
Я пытаюсь перезагрузить и обновить делегат UITableviewCell
on UICollectionViewCell
didSelect, я ожидаю UITableviewCell
, что он будет обновлен в соответствии со значениями, возвращаемыми UICollectionViewCell
выбором. UICollectionViewCell
возвращает data
, как и ожидалось, однако UITableviewCell
не обновляет и не перезагружает данные, а вместо этого продолжает добавлять данные к предыдущему при прокрутке, например, когда я нажимаю «обувь», возвращается обувь, и если я нажимаю «шляпа», шляпа добавляется к данным «обуви» вместо того, чтобы удаляться.отображается как отдельный тип данных.
Я обновляю свой UITableviewCell
из UICollectionViewCell
didSelect
делегата (я нажимаю на api оттуда)
Попадание в Api:
//MARK: - UICollectionViewDelegate
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// SET CATEGORY PARAMETER VALUES
let item = self.type[indexPath.row]
switch item.type {
case .shoe:
self.type[getIndex(type: .shoe)].category = "shoe"
self.type[getIndex(type: .shoe)].subCategory = "men"
self.category = self.type[getIndex(type: .shoe)].category
self.subCategory = self.type[getIndex(type: .shoe)].subCategory
apiCall(categoryKey: self.category!, subCategoryKey: self.subCategory!)
print(category!,subCategory!)
case .hat:
self.type[getIndex(type: .hat)].category = "hat"
self.type[getIndex(type: .hat)].subCategory = "men"
self.category = self.type[getIndex(type: .hat)].category
self.subCategory = self.type[getIndex(type: .hat)].subCategory
apiCall(categoryKey: self.category!, subCategoryKey: self.subCategory!)
print(category!,subCategory!)
}
}
}
- ApiCall функция:
func apiCall(categoryKey: String, subCategoryKey: String) {
if (page == 0) {
data = []
hasMore = false
}
guard let token = UserDefaults.standard.string(forKey: "accessToken") else {return}
MyAPI.getData(token: token, limit: limit, skip: skip, category: categoryKey, subCategory: subCategoryKey, completion: { (response) in
self.hasMore = response.hasMore!
self.page = 1
self.skip = self.limit
self.data.append(contentsOf: response.items)
if let total = response.totalCount {
self.totalCount = total
} else {
self.totalCount = 0
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
}
мой TableView не отображает разные данные в разных выбранных ячейках, а скорее добавляет их друг к другу, что я здесь делаю не так?
(кстати, также есть проблемы с нумерацией страниц, каким-то образом данные неправильно разбиваются на разные данные) .. .
Комментарии:
1. @matt, я сделал, я искал его в Google и перепробовал много способов, но все еще не могу заставить его работать. можете ли вы проверить мой код и найти там плохую логику или неприятный запах?
2. @zeytin, да, братан, ты прав на деле.. я очень ценю вашу помощь, причина, по которой я удалил вопрос, заключалась в том, что я понял, что мое содержимое qustion было неправильным, поэтому я обновил вопрос. извините, что.
3. Вы должны добавить более подробную информацию о том, где находятся ваши CollectionView и TableView. Кроме того, добавьте изображение полученного результата, потому что неясно, что не так