在UITextView.text中进行单词确定的方法,并使用Swift 2.2,iOS 9.3和&amp ;; Xcode 7?

时间:2016-06-15 19:35:25

标签: ios swift swift2 uitextview nstextstorage

使用TextView进行用户消息输入,可在用户编辑期间进行编辑和选择。 该字段下方的按钮之一,在编辑和散列标记模式之间切换TextView。 切换到标记时,TextView具有可编辑的功能。禁用了可选属性,我有一个功能来检测点击并返回文本中的字符位置。

我需要确定单词,如果有的话,点击,并修改UITextView.text中的单词,前缀为#,除非它已经有两个哈希值,否则它会删除哈希值。 我正在为逻辑使用正则表达式。

我无法找到用于确定所点击字符的单词的高级方法。 我搜索了Apple的Dev。库。和raywenderlich和Grok Swift这样的网站,但找不到我肯定必须在那里的方法。

我可以通过测试当前字符是否是有效的字分隔符来实现,如果不是,则递减字符索引并测试直到确定字边界。此时,我返回到前一个索引并测试#字符,如果它是#,我会测试下一个字符,如果它不是#,我会在开头添加#字符这个词。

UIKit,TextKit或UITextView或NSTextStorage的方法中是否有一个函数可以返回被挖掘的字符的单词和该单词的NSRange? 另外,将#添加到TextView文本的正确方法是什么? [textView:shouldChangeTextInRange:replacementText或textView.textStorage:replaceCharactersInRange:withString:]

我在PC,PlayStation和GameBoy上进行过商业化工作,但这是第一次开发应用程序和使用iPhone / Mac平台,所以我真的可以使用建议。

2 个答案:

答案 0 :(得分:0)

用于检测#需要调用委托内的代码shouldChangeCharactersInRange

    let stringprocess = stringfordetecting.text
     let tok =  stringprocess!.componentsSeparatedByString(" ")
    for item in tok

    {
        let demo = String(item)

        if demo.hasPrefix("#") 
        {

        let range = (stringfordetecting.text! as NSString).rangeOfString(item)

        //add code

        }

        else
        {
         //add code    
        }

用于检测抽头字符索引将guest虚拟机添加到textview

let tapGesture = UITapGestureRecognizer(target: self, action: "textTapped:")
    tapGesture.headline = indexPath
    tapGesture.numberOfTapsRequired = 1
    textview2.addGestureRecognizer(tapGesture)


func textTapped(recognizer: MyTapGestureRecognizer){

    let textView: UITextView = recognizer.view as! UITextView
    var layoutManager: NSLayoutManager = textView.layoutManager
    var location: CGPoint = recognizer.locationInView(textView)
    let position: CGPoint = CGPointMake(location.x, location.y)
    location.x -= textview2.textContainerInset.left
    location.y -= textview2.textContainerInset.top
    var charIndex: Int
    charIndex = layoutManager.characterIndexForPoint(location, inTextContainer: textview2.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

    if charIndex < textview2.textStorage.length
            {

        print(charIndex)
            }

}

答案 1 :(得分:0)

用于检测tapguesture识别函数内的textview中的抽头字符

 func textTapped(recognizer: MyTapGestureRecognizer){

    let textView: UITextView = recognizer.view as! UITextView



    var layoutManager: NSLayoutManager = textView.layoutManager
    var location: CGPoint = recognizer.locationInView(textView)


    let position: CGPoint = CGPointMake(location.x, location.y)

location.x -= cell.messageLabel.textContainerInset.left
    location.y -= cell.messageLabel.textContainerInset.top

    var charIndex: Int
    charIndex = layoutManager.characterIndexForPoint(location, inTextContainer: cell.messageLabel.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

    if charIndex < cell.messageLabel.textStorage.length {


        let stringprocess = textview.text


        let tok =  stringprocess.componentsSeparatedByString(" ")

       // let attributedString1 = NSMutableAttributedString(string:stringcheck as String)

        for item in tok

        {
            let demo = String(item)

            if demo.hasPrefix("@") {

                let range = (stringcheck as NSString).rangeOfString(item)



                var i = range.location
                while i <= range.location+range.length

                {
                    if i == charIndex

                    {
                        print(demo)

                }

                    i++

                }




            }



         }
        }