在单元格内单击时找出 UITableView 中的哪个部分按钮
Posted
技术标签:
【中文标题】在单元格内单击时找出 UITableView 中的哪个部分按钮【英文标题】:Find Out Which Section Button Belongs To In UITableView When Clicked Inside Cell 【发布时间】:2015-07-22 00:25:41 【问题描述】:我正在尝试根据单击按钮的部分来更改数组元素的值。例如说我有这个数组 numbers = [0,0,0,0,0] 我想更改第一个元素为 5。我将 5 插入到第一部分的单元格中,然后在同一部分中单击完成,数组现在将读取 [5,0,0,0,0]。有没有办法知道按钮属于哪个部分?
现在我有两个单独的课程。一个用于自定义单元格,一个用于表格视图。两者都有按钮的出口。单击按钮时,自定义单元类将临时全局编号更改为插入的编号。在表格类中,我希望按钮操作采用该全局编号并插入与按钮所属部分相同编号的元素中。除了我不知道如何找出它属于哪个部分。
谁能帮我解决这个问题?顺便说一句,我正在用 Swift 写作。
【问题讨论】:
在 Objective-C 中,请参阅 ***.com/questions/22368525/… 获取获取按钮 indexPath 的解决方案。 【参考方案1】:如果您只需要包含点击按钮的单元格的索引路径的部分(而不是部分和行),您可以在配置表格视图单元格时使用部分编号(Int)标记按钮:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("MyIdentifier", forIndexPath:indexPath) as! MyCustomTableViewCell
cell.myCustomButton.tag = indexPath.section
// Remove all existing targets (in case cell is being recycled)
cell.myCustomButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
// Add target
cell.myCustomButton.addTarget(self, action:"buttonAction:", forControlEvents:.TouchUpInside)
return cell
func buttonAction(sender:AnyObject)
if let button = sender as UIButton
println("Tapped Button in section: \(button.tag)")
如果您同时需要 AND 部分,则最好存储整个索引路径。为此,您可以使用具有NSIndexPath
类型属性的自定义UIButton
子类,或者将其存储在表格视图单元格中。
但是第二种解决方案有点混乱,因为您必须使用superview
等从按钮访问表格单元格(然后是索引路径),这依赖于表格单元格的子视图结构。我不确定您的按钮的父视图是表格单元格本身还是它的“内容视图”(我现在有点生疏......)
【讨论】:
非常感谢。这正是我一直在寻找的。但是我必须删除 // 删除所有现有目标(以防单元格被回收) cell.myCustomButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents) 和 // 添加目标 cell.myCustomButton.addTarget(self, action :"buttonAction:", forControlEvents:.TouchUpInside) 因为它可以让我的自定义单元格类中的操作到达。这到底是做什么的? 我只是担心两次添加相同的目标/动作会产生重复,当您点击按钮时,您的方法会被调用两次或更多次;但我不确定(必须研究)。 也就是说,如果您每次回收单元格时添加相同的目标/操作,则该按钮最终会有多个副本,并且在点击时,它会通知每个条目(您的视图控制器,每次)。但我不确定 UIButton 如何处理重复的目标/动作对。所以我只是添加了那行来确定。 好吧,这是有道理的。但无论如何,非常感谢。现在我必须弄清楚如何将用户键入的所有这些数据条目保存到每一行中哈哈。【参考方案2】:如果您想查找“点击”了哪个单元格,您可以使用UITableViewDelegate
方法。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
【讨论】:
问题是关于处理单元格中按钮的按钮按下。您提议的代表将不会被调用。 误解了这个问题。我的错。以上是关于在单元格内单击时找出 UITableView 中的哪个部分按钮的主要内容,如果未能解决你的问题,请参考以下文章
当我单击 UIButton 时,我试图找出当前在 UITableView 中选择了哪些单元格
Swift:UITableView - 滑动删除 - 如何让单元格内容在滑动时不移动