Пользовательская функция автозаполнения UITextView - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать настраиваемое поле автозаполнения (как в строке поиска) для научного приложения, которое позволяет добавить определение к UITextView. Процесс будет идти так:

  1. Пользователь нажимает кнопку в аксессуаре клавиатуры, и кнопка добавляет «блок» в UITextView
  2. При наборе текста в блоке внизу отображается TableView? с предложениями элементов периодической таблицы.
  3. После выбора элементов, щелкнув предложение в TableView (или нажав клавишу ввода и выбрав первое предложение), создается блок, который показывает имя и определение элемента Периодической таблицы. Я быстро смоделировал то, что я думаю, используя приложение для заметок BEAR. Он имеет аналогичную функцию только без последнего шага: https://imgur.com/a/1RrcUkC

Я новичок во многом из этого, поэтому заранее благодарю вас за любые предложения о том, каковы соглашения об именах всего этого, а также за любую связанную информацию или объяснения того, как мне этого добиться.

1 Ответ

0 голосов
/ 15 мая 2019

Вот простой способ добиться этого.

Я использовал стороннюю библиотеку под названием DropDown , чтобы показать раскрывающийся список при добавлении определенного слова в UITextView.

import UIKit
import DropDown

class ViewController: UIViewController, UITextViewDelegate {

    @IBOutlet weak var textView: UITextView!

    let dropDown = DropDown()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    func textViewDidChange(_ textView: UITextView) {

        if textView.text.last == "#" {

            let endPosition: UITextPosition = textView.endOfDocument

            //Get courser position to show dropdown
            let rect = textView.caretRect(for: endPosition)

            //Create a custom view to provide anchorView to DropDown
            let customView = UIView(frame: CGRect(x: rect.origin.x, y: rect.origin.y, width: 200, height: 0))
            textView.addSubview(customView)

            dropDown.anchorView = customView  // UIView or UIBarButtonItem

            // The list of items to display. Can be changed dynamically
            dropDown.dataSource = ["Car", "Motorcycle", "Truck"]

            // Action triggered on selection
            dropDown.selectionAction = { [unowned self] (index: Int, item: String) in
                print("Selected item: \(item) at index: \(index)")
                //remove Custom view as we no longer needed it.
                customView.removeFromSuperview()

                //Set your text accourding to selection from dropdown item.
                textView.text = textView.text.dropLast() + " " + "\(item)"
            }

            dropDown.show()
        }
    }
}

Я добавил комментарий для объяснения.

И ваш результат будет:

enter image description here

ЗДЕСЬ - демонстрационный проект для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...