好的,我对这里的集合视图缺乏了解,以及它们如何不断实例化单元格。我将MsStickerViews添加到我的集合视图以及该视图的本地描述(名称)。理想情况下,我只想做一次(不是每次用户滚动)。根据我的理解,标准集合视图功能
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
每次用户滚动时都会调用;只需一次又一次地添加你在此功能中添加的内容。为了解决这个问题,我创建了一个单独的类StickerCollectionViewCell
,其中我有这些初始化函数:
public var animalName = String()
var logoLabel = UILabel()
public var hasSticker = Bool(false)
public func initSticker(stickerView: MSStickerView)
{
print("PUTTING: ",stickerView.sticker?.localizedDescription)
self.addSubview(stickerView)
stickerView.startAnimating()
}
public func initLabels()
{
//print("called", animalName)
logoLabel.frame = CGRect(x: 0, y: 0, width: self.bounds.width, height: 100)
logoLabel.textColor = UIColor.black
logoLabel.textAlignment = .center
//logoLabel.text = stickerPack[indexPath.item].sticker?.localizedDescription.uppercased()
logoLabel.text = animalName.uppercased()
logoLabel.font = UIFont(name: "Futura-Bold", size: screenSize.height * (9.8/screenSize.height))
logoLabel.center = CGPoint(x: self.bounds.width * 0.5, y: self.bounds.height * 0.96)
self.addSubview(logoLabel)
}
然后我按照这样添加我的单元格:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "stickerCell", for: indexPath as IndexPath) as! StickerCollectionViewCell
cell.backgroundColor = UIColor.clear// make cell more visible in our example project
if(cell.hasSticker == false && animalNames.contains((stickerPack[indexPath.item].sticker?.localizedDescription)!) == false)
{
cell.initSticker(stickerView: stickerPack[indexPath.item])
cell.animalName = (stickerPack[indexPath.item].sticker?.localizedDescription)!
cell.initLabels()
animalNames.append(cell.animalName)
cell.hasSticker = true;
}
print("Animal names", animalNames)
return cell
}
if语句的原因是我从一系列名称中添加贴纸视图,直到今天我在数组中只有6个名字。现在有了7,它开始在另一个单元格的顶部添加数组中的最后一项即使我计算了它仍然会生成7个单元格。
bool和存储已用尽名称的数组现在帮助它们不重叠,但是最后一项永远不会被添加。它不会被放入用完的名称数组中。当我滚动时,单元格中的贴纸会移动,这意味着当我滚动到底部时,顶部的贴纸将位于底部。
我检查过,我正在创建正确数量的单元格:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("COUNT",self.animalsAnim.count)
return self.animalsAnim.count
}
我不知道造成这种情况的原因。我怎样才能阻止细胞不断清新?为什么我的字符串数组中的最后一项不会被添加?怎么了?
答案 0 :(得分:1)
使用不同/更好的方法。
在故事板中创建单元格模板。将模板中单元格的类设置为自定义类。将所需的字段添加到单元格,然后使用outlet将它们连接到单元格。然后删除所有将自定义字段添加到单元格的代码。只需将值安装到cellForItemAt
方法中已添加的单元格字段中。
答案 1 :(得分:0)
select 'STEP 12 3-2' as str
,substr(str,instr(str,' ',-1)+1) as token
;
+-------------+-------+
| str | token |
+-------------+-------+
| STEP 12 3-2 | 3-2 |
+-------------+-------+