swift4.0 cell重用导致ReactiveCocoa(RAC) cell上Button点击事件多次触发问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift4.0 cell重用导致ReactiveCocoa(RAC) cell上Button点击事件多次触发问题相关的知识,希望对你有一定的参考价值。
参考技术A 在UITableview等涉及cell的重用的界面中,cell上的按钮点击事件RAC响应会随着cell的重用多次触发,并导致cell无法释放cell上添加按钮
在cell对象中触发按钮的RAC点击事件
在不滚动界面的情况下点价按钮只响应了一次
滚动界面后点击按钮,直接打印了四个log
这个问题是由于cell重用导致的,需要解除signal在重用时的绑定。
滚动界面触发按钮事件查看log
嘿嘿,只有一次啦,成功解决
如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell
【中文标题】如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell【英文标题】:How to add TextField to Cell using tags in Swift 2.0 【发布时间】:2015-11-23 15:52:03 【问题描述】:我希望表格的第一行有一个带有 TextField 的单元格(在我的例子中名为 FindTextField)。 我实现的方式(见下面的代码),因为单元格被重用,如果单元格列表向下滚动,那么更多的单元格将被分配给 TextField。我想知道如何使用标签或任何其他允许强制只有第一行才有 TextField 的东西,即使用户一直向下滚动然后向上滚动。
现在,这里是代码:
func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("identifier",
forIndexPath: indexPath) as UITableViewCell
if indexPath.row == 0
FindTextField.frame = CGRectMake(74, 4, cell.bounds.width - 78 , cell.bounds.height - 8)
FindTextField.hidden = false
FindTextField.placeholder = "Find"
FindTextField.font = UIFont.systemFontOfSize(20)
FindTextField.borderStyle = UITextBorderStyle.RoundedRect
FindTextField.autocorrectionType = UITextAutocorrectionType.No
FindTextField.keyboardType = UIKeyboardType.Default
FindTextField.returnKeyType = UIReturnKeyType.Done
FindTextField.clearButtonMode = UITextFieldViewMode.WhileEditing;
FindTextField.contentVerticalAlignment = UIControlContentVerticalAlignment.Center
FindTextField.delegate = self
FindTextField.autocapitalizationType = .AllCharacters
cell.contentView.addSubview(FindTextField)
cell.imageView?.image = UIImage(named: "menu_find.png")
cell.textLabel?.hidden = true
cell.textLabel!.text = StationsChatList[indexPath.row]
cell.textLabel!.font = UIFont.systemFontOfSize(24)
cell.textLabel?.textColor = UIColor.whiteColor()
cell.textLabel?.backgroundColor = UIColor.blackColor()
cell.backgroundColor = UIColor.blackColor()
cell.layer.borderWidth = 1.0
cell.layer.borderColor = UIColor.darkGrayColor().CGColor
return cell
【问题讨论】:
为什么要使用标签?创建两个自定义单元格,一个带有UITextField
,一个没有。将带有 indexPath 0 的文本字段的单元格和所有其他 indexPaths 的没有文本字段的单元格出列。
【参考方案1】:
您可以将tag
分配给您的textField
,然后再访问它。当row != 0
简单地隐藏它。这就是我要说的:
if cell.viewWithTag(1001) == nil // init your text field
FindTextField.frame = ...
FindTextField.tag = 1001 // or whatever you want
...
cell.viewWithTag(1001)?.hidden = indexPath.row != 0
...
还有另一种方法 - 在您的单元格中实现prepareForReuse()
方法并手动隐藏FindTextField
(它将为每个单元格隐藏)。稍后在cellForRow
中使其可见,如果row == 0
。
【讨论】:
以上是关于swift4.0 cell重用导致ReactiveCocoa(RAC) cell上Button点击事件多次触发问题的主要内容,如果未能解决你的问题,请参考以下文章