tableviewcell重复uibuttons

时间:2016-07-23 18:12:41

标签: ios swift uitableview uibutton

我对桌面视图上的按钮有点麻烦。

我有一个tableViewCell,我用3个按钮定制。我将按钮设置为隐藏在界面构建器中,当表格加载时,按钮按预期隐藏。

然后在调用didSelectRow时将tableview的hidden属性设置为false,并在调用didDeselectRow时将hidden.true设置为false。这也很好。问题是在didSelectRow中设置为可见的按钮每七个单元格也可见。他们不断重复自己。

以下是显示按钮的代码

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
   let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell

            print("Table selected")

                cell.insertEmailButton.hidden = false
                cell.insertPhoneButton.hidden = false
                cell.insertAllButton.hidden = false
                cell.contactTextLabel.alpha = 0.2
                cell.contactDetailTextLabel.alpha = 0.2
        }

当取消选择tableViewCell时,这会隐藏它们

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell

        cell.insertEmailButton.hidden = true
        cell.insertPhoneButton.hidden = true
        cell.insertAllButton.hidden = true
        cell.contactTextLabel.alpha = 1.0
        cell.contactDetailTextLabel.alpha = 1.0  
    }

我做了一些研究,并且我了解到它可能是由table.h重复使用buttons.hidden设置为false的行。但我从文档中了解到,重用的单元格来自cellForRowAtIndexPath,而不是didSelectRow中的单元格,这是我将button.hidden设置为false的位置。

我还尝试在cellForRowAtIndexPath的if else语句中使用cell.isSelected属性来隐藏和显示按钮,但这根本不显示按钮。

提前感谢您的帮助

3 个答案:

答案 0 :(得分:0)

当滚动表时,tableview重用单元格的视图,以节省内存。因此,例如,当您将按钮设置为可见(在didSelectRow内)然后向下滚动表格时,tableview将从顶部的可见屏幕中取出单元格并将在底部重复使用它们以保存创建新单元的开销,提高性能。

这就是为什么你在细胞上的先前属性正在重复。

要在滚动的单元格上获得所需的隐藏按钮,我建议在

中将button.hidden设置为true / false
tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

只要新行滚动到可见视图区域,就会将按钮设置为隐藏。

希望这有帮助。

答案 1 :(得分:0)

当我检查cellForRowAtIndexPath中是否取消选择单元格时,我通过隐藏它们来解决重复按钮。这也意味着我选择的任何单元格都将失去其选定状态,按钮在离开视图时将消失。 我可以忍受这一点。

   if cell.selected == false{
       cell.emailButton.hidden = true
       cell.phoneButton.hidden = true
       cell.allButton.hidden = true
    }

答案 2 :(得分:0)

UITableView重用其单元格以提高性能。所以,你不能按照你的方式去做。我们要做的是,像其他tableview单元格信息一样,例如标题,描述,拇指图像等我们还需要保存数组中按钮的状态。如果要隐藏单元格中的索引对象的按钮,请更改按钮的按钮状态并重新加载该表格视图单元格。如果您遇到问题或感觉难以理解,请随时询问。