我有一个集合视图和一个按钮。 当我点击此按钮时,我想更改其名称。 我设法做到了,但是当我点击它时,如果我有20个按钮,它会改变,如果我点击第一个按钮,它会改变0,2,4,6,8,如果我点击一个按钮,那就是在列表中,然后检查所有按钮。
这是我的代码:
@IBAction func following(sender: AnyObject) {
if follow.tag == sender.tag {
follow.setTitle("Following", forState: .Normal)
}
print("\(follow.tag) \(sender.tag)")
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Interest Cell", forIndexPath: indexPath) as! ThirdTabCell
cell.follow.tag = indexPath.row
return cell
}
内部按钮的功能我尝试了没有if语句,但同样的问题。 当我打印标签时,它只打印被轻敲的按钮。
我也尝试过这个ViewController
cell.follow.addTarget(self, action: #selector(ThirdTab.follow(_:)), forControlEvents: UIControlEvents.TouchUpInside)
//inside cellForItemAtIndexPath
func follow(sender:UIButton!) {
}
答案 0 :(得分:3)
只是简短的概述,所以你得到答案
UICollectionView经过高度优化,因此只在内存中保留屏幕上可见的行。现在,所有行单元格都缓存在池中并被重用而不是重新生成。每当用户滚动UICollectionView时,它会在Pool中添加刚刚隐藏的行,并重新使用它们作为可见行。
所以,现在,回答你的问题
当您点按按钮时,其标题会更新,但是当您滚动收藏视图时,相同的单元格会带有"更新的按钮文字"将被重用,将导致您看到的问题。
<强>解强>
在数组中按行动方法
保存按钮状态@IBAction func following(sender: AnyObject) {
if follow.tag == sender.tag {
array[sender.tag] = "<text>"
collectionView.reloadData()
}
print("\(follow.tag) \(sender.tag)")
}
并在您的数据源方法中 更新您的按钮文字,如下所示:
//技巧是更新每个索引的按钮文字
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{
//SAMPLE CODE
let buttonValue = array[indexPath.index]
// update button value for each index
//trick is to update your button text for each index
cell.button.setTitle("", forState: .Normal)
}
答案 1 :(得分:1)
我建议你这样做。
在cell.followOutlet.tag = indexPath.row
内,您可以像这样分配按钮插座
@IBAction func following(sender: AnyObject) {
let follow = sender as! UIButton
let indexP = NSIndexPath(forRow: follow.tag, inSection: 0)
let cell = yourCollectionView.cellForItemAtIndexPath(indexP) as! yourCellName
follow.setTitle("Following", forState: .Normal)
}
然后在你的跟随功能中你可以做到这一点
(2* 4)(2*1-1)3 is equals to (2 *4)\*(2*1-1)*3
现在你可以用你的按钮做任何你想做的事。
答案 2 :(得分:0)
请在以下功能中更改设定标题行以下。
现有专栏:
.gitlab-ci.yml
新行:
follow.setTitle("Following", forState: .Normal)
希望这对你有用。
由于