У меня есть одна кнопка переключения. Изначально он будет в выключенном состоянии. Поэтому, когда я включаю переключатель, мне нужно передать набор данных в представление коллекции. И когда он снова отключится, мне нужно передать набор данных в представление коллекции.
Итак, вот мой код:
@IBAction func cateSelTap(_ sender: Any) {
isChecked = !isChecked
if isChecked {
self.subsetTheCategoryListForClientLogin(isCityLogin: false)
}else {
self.subsetTheCategoryListForClientLogin(isCityLogin: true)
}
}
func subsetTheCategoryListForClientLogin(isCityLogin: Bool) {
let cityType = "city"
print("LOG:CATE1 \(self.categoryarr)")
var objectIds = [Int]()
var subsetArray = NSMutableArray()
for i in 0..<self.categoryarr.count {
let type = (self.categoryarr.object(at:i) as AnyObject).value(forKey: "type") as! String
if isCityLogin {
if type == cityType {
subsetArray.add(self.categoryarr.object(at:i) as AnyObject)
objectIds.append(i)
}
} else {
if type != cityType {
subsetArray.add(self.categoryarr.object(at:i) as AnyObject)
objectIds.append(i)
}
}
}
self.categoryarr.removeAllObjects()
self.categoryarr = subsetArray
print("LOG:CATE2 \(self.categoryarr)")
DispatchQueue.main.async{
self.categorycollection.reloadData()
// self.categorycollection.performSelector(onMainThread: #selector(self.categorycollection.reloadData), with: nil, waitUntilDone: true)
}
}
Когда я запускаю свое приложение и когда я выключаюсь, мои данные представления коллекции не отображают точные данные ... тем не менее они показывают предыдущие данные. Опять же, когда я выключаю его полностью пустой.
Любая помощь в этом?
да, я передаю ему значения bool. на основе этого логического значения только мои данные будут отправляться в колл-представление
@Akhilrajtr да, потому что в моем представлении коллекции я использую categoryarr, чтобы показать значения в ячейке представления моей коллекции. Так что только я назначен на categoryarr. если это выключено, то логические значения будут ложными. И если это значение bool, то оно будет истинным. Я добавляю данные только на основе логического значения.
Если вам нужно отфильтровать исходный массив с условием и отобразить отфильтрованные элементы в представлении коллекции, используйте другой массив в качестве источника представления коллекции и сохраните исходный источник данных как есть.
@IBAction func cateSelTap(_ sender: Any) {
isChecked = !isChecked
if isChecked {
self.subsetTheCategoryListForClientLogin(isCityLogin: false)
} else {
self.subsetTheCategoryListForClientLogin(isCityLogin: true)
}
}
то же самое в моем посте. Что еще добавлено??
У вас было isCityLogin: false
дважды; у этого есть false
, то true
. Если это решение, было бы неплохо указать на это.
я поменял, то тоже безуспешно
Добавьте новое свойство, например categoryarr
, например categoryCollectionViewSource
, и назначьте ему начальные данные. Используйте categoryCollectionViewSource
в методах делегата представления коллекции вместо categoryarr
. И в методе фильтра
func subsetTheCategoryListForClientLogin(isCityLogin: Bool) {
let cityType = "city"
print("LOG:CATE1 \(self.categoryarr)")
var objectIds = [Int]()
var subsetArray = NSMutableArray()
for i in 0..<self.categoryarr.count {
let type = (self.categoryarr.object(at:i) as AnyObject).value(forKey: "type") as! String
if isCityLogin {
if type == cityType {
subsetArray.add(self.categoryarr.object(at:i) as AnyObject)
objectIds.append(i)
}
} else {
if type != cityType {
subsetArray.add(self.categoryarr.object(at:i) as AnyObject)
objectIds.append(i)
}
}
}
//note this line
self.categoryCollectionViewSource.removeAllObjects()
self.categoryCollectionViewSource = subsetArray
print("LOG:CATE2 \(self.categoryarr)")
DispatchQueue.main.async{
self.categorycollection.reloadData()
}
}
categoryCollectionViewSource
какой тип собственности ??
то же, что categoryarr
собственность.
я пытался, но я получаю сбой, как в ячейке для диапазона индекса метода индекса [0.. 3] вот так
возможно, вы все еще используете categoryarr
в методах делегата/источника данных collectionview.
Я исправил это... не могли бы вы помочь мне здесь: stackoverflow.com/questions/55590016/….
Похоже, вы вызываете
subsetTheCategoryListForClientLogin:
с одним и тем же параметром в обоих условиях действия кнопки. Также вы применяете фильтр кself.categoryarr
и присваиваете результаты себе. Это причина того, что коллекция становится пустой после некоторого цикла включения/выключения.