Swift: перетаскивание делегата - невозможно перетаскивать текстовое представление, когда оно перетаскивается в другое текстовое представление - PullRequest
0 голосов
/ 28 января 2019

В настоящее время я создаю потрясающее мобильное приложение типа гонки, в котором игроки будут играть в разные игры в зависимости от их местоположения.Одной из игр, в которую они должны играть, будет типичная игра с перетаскиванием.В настоящее время я могу выполнить перетаскивание для двух текстовых представлений.Однако:

  • Я не могу перетащить предыдущий упавший предмет, чтобы вернуть его на исходное место, а также перетащить другие предметы в выброшенное место
  • Каждыйу удаленного местоположения может быть только 1 элемент
  • Я должен иметь возможность сопоставить содержание перетаскиваемого элемента с отброшенным элементом, чтобы я знал, что это правильный вариант для суммирования баллов
  • Как мне масштабировать его для нескольких UITextView, чтобы перетаскивать

Я создал образец для тестирования, с 2 UITextView - 1 для перетаскивания и 1 для перетаскивания.Перетаскивание работает, но я не совсем уверен, как вытащить его после того, как я его уронил.

Со следующим контроллером представления:

class ViewController: UIViewController, UIDragInteractionDelegate, UIDropInteractionDelegate{
  @IBOutlet weak var dragTextView: UITextView!
  @IBOutlet weak var dropTextView: UITextView!

  override func viewDidLoad() {
    super.viewDidLoad()

    dragTextView.isUserInteractionEnabled = true
    dropTextView.isUserInteractionEnabled = true

    dropTextView.layer.borderWidth = 1
    dropTextView.layer.borderColor = UIColor.lightGray.cgColor

    let dragTextInteraction = UIDragInteraction(delegate: self)
    let dropTextInteraction = UIDropInteraction(delegate: self)

    dragTextInteraction.isEnabled = true

    dragTextView.addInteraction(dragTextInteraction)
    dropTextView.addInteraction(dropTextInteraction)

  }

  func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool {
    return session.hasItemsConforming(toTypeIdentifiers: [kUTTypePlainText as String])
  }

  func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal {
    let location = session.location(in: self.view)
    let dropOperation: UIDropOperation?

    if session.canLoadObjects(ofClass: String.self) {

      if dropTextView.frame.contains(location) {
        dropOperation = .copy
      } else {
        dropOperation = .cancel
      }
    } else {
      dropOperation = .cancel
    }

    return UIDropProposal(operation: dropOperation!)
  }

  func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
    if session.canLoadObjects(ofClass: String.self) {

      session.loadObjects(ofClass: String.self) { (items) in
        let values = items as [String]
        self.dropTextView.text = values.last

      }
    }
  }

  func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {

    if let textView = interaction.view as? UITextView {
      let textToDrag = textView.text
      let provider = NSItemProvider(object: textToDrag! as NSString)
      let item = UIDragItem(itemProvider: provider)
      return [item]
    }

    return []
  }
}

Были проблемы из-за этого.Любая помощь будет принята с благодарностью:)

...