滚动下来时如何使UIButton在tableview中保持选中状态

时间:2016-07-11 05:14:14

标签: ios swift uitableview uibutton

我在cell.swift文件中有一个按钮,上面有一个按钮,这是目标函数。

如果我选择按钮并向下滚动并返回,则会再次取消选择。

我尝试了setSelected的多种变体并设置了突出显示,但没有任何效果。

func selectRecipient(sender:UIButton) {
    if (!selectToShareButton.selected) {
        selectToShareButton.selected = true
        selectToShareButton.setImage(UIImage(named: "checkSelected"), forState: .Selected)  
    } else {
        selectToShareButton.selected = false
        selectToShareButton.setImage(UIImage(named: "checkUnselected"), forState: .Normal)
   }
}

5 个答案:

答案 0 :(得分:5)

您应该将按钮的状态保存在数组中,并在数据源函数cellForRowAtIndexPath中读取状态并配置单元格按钮。

答案 1 :(得分:1)

这是因为表视图重用单元格并使用滚动连续出列。因此,每次滚动时单元格都会被创建和销毁,因此所有属性都将设置为默认值,您将在cellforrow或单元格的自定义类(如果可用)中进行设置。

所以,您可以管理类似的内容,您可以将tag设置为按钮indexpath.row,当您选择按钮时设置一些flag或将其保存在某个地方,并将条件设置为cellforrow如果按钮的标签来自保存的标签而不是选中它。

答案 2 :(得分:0)

你应该创建一个维护按钮选择轨道的selectedArray

 var selectedButtonsArray = [{
isSelected = true
},
{isSelected = false}
]
  1. 在选中按钮时在数组中添加对象
  2. 取消选择时从数组中删除对象
  3. 在用于行委托方法的单元格中,根据数组显示按钮
  4. 希望这对你有帮助, 谢谢

答案 3 :(得分:0)

阐述Hossam的回答,

您可以创建一个布尔值数组,指示是否选择了单元格。

var selectedBoolArray = [Bool]()

您可以为您添加目标按钮,以便每次点击此按钮时都会触发方法:

override func viewDidLoad() {
    super.viewDidLoad()

   /// If your button is referenced from storyboard. Or add target to each button somehow.
    YourButton.addTarget(self, action: #selector(YourClass.methodToSelect(_:)), forControlEvents: .TouchUpInside)

}


func methodToSelect(sender: UIButton)
{
let index = sender.tag 
selectedBoolArray[index] = true
}

然后在你的cell for cellforrowatindexpath方法中,你可以将这些bool设置为false或true,如下所示:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)


        if selectedBoolArray[indexPath.row] {
           // set you button  selected, cell.button.selected = true?
        }


    YourButton.tag = self.indexPath.row

        return cell
    }

答案 4 :(得分:0)

你应该管理细胞模型:

func BtnPressed(sender: AnyObject) {
    var point: CGPoint = sender.convertPoint(CGPointZero, toView: self.categoryTable)
    var index: NSIndexPath = self.categoryTable(forRowAtPoint: point)
    var cell: UITableViewCell = self.categoryTable.cellForRowAtIndexPath(index)
    category.manageCell(index.row)
    self.categoryTable.reloadRowsAtIndexPaths([index], withRowAnimation: .Automatic)
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if category.indexArray.containsObject(Int(indexPath.row)) {
        checkBtn.setImage(UIImage(named: "ic_check"), forState: .Normal)
    }
    else {
        checkBtn.setImage(UIImage(named: "ic_uncheck"), forState: .Normal)
    }
    return cell
}

func manageCell(index: Int) {
    // index array mutable array
    if !indexArray.containsObject(Int(index)) {
        indexArray.append(Int(index))
    }
    else {
        indexArray.removeAtIndex(indexArray.indexOf(Int(index)))