如何更改单元格Swift中按钮的标题

时间:2016-07-18 08:34:16

标签: ios swift uitableview uicollectionview

我有一个集合视图和一个按钮。 当我点击此按钮时,我想更改其名称。 我设法做到了,但是当我点击它时,如果我有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!) {



        }

3 个答案:

答案 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)

希望这对你有用。

由于