Необходимо отредактировать UITextView внутри расширяющегося UITableViewCell - PullRequest
0 голосов
/ 24 октября 2018

У меня есть динамическая ячейка внутри 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 голосов
/ 18 ноября 2018

Я решил эту проблему, заменив действия 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()
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...