ios – 将触摸事件处理到一个UITableCell

我有一些UITableViewCells,我可以在其中执行单击操作.

当单击操作开始时,单元格将展开,并将显示UIPickerView,UITextView或其他数据. (见示例图片)

再次单击TableCell时,单元格将折叠,并显示原始状态.

当我使用展开操作单击UITableViewCell时,每个单元格都会展开.当我单击一个单元格时,我希望每个其他单元格都折叠,只展开单击的单元格.

题:

如何为扩展的表格单元格提供接收所有触摸事件的状态单元格. (成为整个屏幕的第一个响应者)并先关闭它,然后在关闭操作后将click事件发送到相应的UITableViewCell.

我已经使UITextView成为第一个响应者,它会在它加速后关闭键盘,但我希望表格单元格成为点击事件的处理程序.

示例代码

func togglePicker() {
    //This function is called when the UITableCell is clicked.

    canBecomeFirstResponder()

    // Some code here which adds UIPickerView, UITextView or other data.

    setNeedsLayout()
}

我尝试了这个代码,但是这个单元只接收在这个单元格中触发但不在其边界之外的触摸事件.

示例图片

Orginal cell state

First cell is expanded

最佳答案 我实现了以下解决方案:

class CustomCell: UITableViewCell {

   var delegate: CustomCellDelegate?
   var focussed: Bool = false

   function becomeFocussed() {
      //Put some code here to change the design
      setNeedsLayout()
      focussed = true
      delegate?.isFocussed(self)
   }

   function becomeNormaleState() {
      //Put some code here to change the design to the original state.
      focussed = false
      setNeedsLayout()
   }

}

每个Cell都有两个函数:becomeFocussed()和becomeNormaleState().单击单元格时,应调用函数becomeFocussed().
此函数告诉代理该单元格已被选中.

在TableViewController中,函数isFocussed(cell:UITableViewCell),循环遍历当前tableView的al单元格,为每个被聚焦的单元调用“becomeNormaleState()”.

点赞