Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义UITextView自动完成功能_Ios_Swift_Xcode_Uitableview_Uitextview - Fatal编程技术网

Ios 自定义UITextView自动完成功能

Ios 自定义UITextView自动完成功能,ios,swift,xcode,uitableview,uitextview,Ios,Swift,Xcode,Uitableview,Uitextview,我正在尝试为一个科学应用程序创建一个自定义的自动完成字段(如在搜索栏中),允许将定义添加到UITextView。这个过程会是这样的 用户轻触键盘附件中的按钮,按钮在UITextView中添加一个“块” 在“块”中键入时,下面会显示一个TableView?,其中包含元素周期表元素的建议 通过单击TableView中的建议(或按enter键并选择第一个建议)选择元素后,将生成一个显示元素周期表元素名称和定义的块。 我用notes应用程序BEAR很快模拟了我的想法。它具有类似的功能,但没有最后一步:

我正在尝试为一个科学应用程序创建一个自定义的自动完成字段(如在搜索栏中),允许将定义添加到
UITextView
。这个过程会是这样的

  • 用户轻触键盘附件中的按钮,按钮在
    UITextView中添加一个“块”
  • 在“块”中键入时,下面会显示一个
    TableView?
    ,其中包含元素周期表元素的建议
  • 通过单击TableView中的建议(或按enter键并选择第一个建议)选择元素后,将生成一个显示元素周期表元素名称和定义的块。 我用notes应用程序BEAR很快模拟了我的想法。它具有类似的功能,但没有最后一步:

  • 我对很多这方面都不熟悉,因此提前感谢您对这一切的命名约定提出的任何建议,以及关于如何实现这一点的任何相关信息或解释。

    以下是实现这一点的简单方法

    我使用了调用的第三方库,在将特定单词添加到
    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()
            }
        }
    }
    
    我已经添加了解释意见

    您的结果将是:


    有关详细信息,请参阅演示项目。

    您可以试试这个嗨,非常感谢您的帮助!!你认为我怎样才能制作出真正的积木?所以它在一个有背景和两个独立文本部分的盒子里,就像我在上面发布的视频一样?我不一定需要文本编辑只是在一个包含的部分。。。期待您的回复:)P.S.我似乎也无法访问您的链接…我也不想让它在键入标签字母时处于活动状态,但在单击键盘附件视图中的按钮时,它会创建一个“块”…回购现在是公开的,您可以访问它。当用户单击任何选项时,您可以执行该操作,并且为2单独的文本部分可以使用属性文本。我也不明白“我不需要只在包含的部分中编辑文本”的意思,它似乎不是一个包含的块。就像我在视频中展示的那样。一个带有背景和两个文本部分的实际正方形。。。我将如何实现这一点?