需要在展开的UITableViewCell中编辑UITextView

时间:2018-10-24 19:59:44

标签: swift uitableview uitextview

我在TableView中有一个动态单元格,该单元格根据TextView中的信息自动调整大小。这发生在tableView:didSelectRowAt函数内部。简化的版本如下:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    guard let cell = tableView.cellForRow(at: indexPath) as? cell else { return }

if cell.textViewOutlet.attributedText.length != 12 {
cell.textViewOutlet.attributedText = NSMutableAttributedString(
    string: "Expand:\n\n\n " +  String(indexPath.row)
)
} else {
    cell.textViewOutlet.attributedText = NSMutableAttributedString(
        string: "Cell: " +  String(indexPath.row)
    )
} 

如下图所示:enter image description here

在图像中,单元1展开,单元0和2被压缩。通过此设置,我可以让用户通过选择单元格在扩展和压缩单元格(和消息)之间进行切换。

我的问题是我想让用户能够编辑文本。当然,当用户单击编辑时,将输入“ didSelectRowAt”功能。

区分编辑操作和扩展操作的最佳方法是什么?我可以将动作设为多点触控或长按动作吗?

一个限制是,在textView中可以使用的任何触摸方法也必须在应用程序中不具有这些扩展功能的其他单元格中使用。因此,如果我可以使用另一种技术进行扩展,将会更干净。

1 个答案:

答案 0 :(得分:0)

我通过用捏手势替换didSelectRowAt操作来解决此问题,以扩大或缩小单元格。因此,textView编辑可以正常进行。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
...
 let pinch = UIPinchGestureRecognizer(target: self,
                                             action: #selector(pinchResponse(recognizer:)))

        cell.addGestureRecognizer(pinch)
           cell.isUserInteractionEnabled = true
 return cell
}

@objc  func pinchResponse(recognizer: UIPinchGestureRecognizer)  {
    print("in pinchResponse  recognizer.scale: \(recognizer.scale)")
    if recognizer.state == UIGestureRecognizer.State.ended {
        let pinchLocation = recognizer.location(in: tableView)
        if let pinchIndexPath = tableView.indexPathForRow(at: pinchLocation) {
            if let pinchedCell = tableView.cellForRow(at: pinchIndexPath) as? StepTableViewCell {

                // 2
                if recognizer.scale > 1.0 {
                    print("Expand pinchIndexPart.count: \(pinchIndexPath.count)")
                    // Add expand actions
                    print("pinchedCell: \(String(describing: pinchedCell.recipeNbrLabel.text))")


                } else {
                    print("Contract pinchIndexPart.count: \(pinchIndexPath.count)")
                    // Add contract actions
                    print("pinchedCell: \(String(describing: pinchedCell.recipeNbrLabel.text))")


                }

                tableUpdate()
            }
        }
    }
}