Ios 如何使UITextView的一部分不可编辑和可点击,并正确显示表情?

Ios 如何使UITextView的一部分不可编辑和可点击,并正确显示表情?,ios,iphone,swift,uitextview,emoji,Ios,Iphone,Swift,Uitextview,Emoji,我的应用程序中有UITextView,它应该包含一个不可编辑且可单击的后缀categoryString,类似于。我的shouldChangeTextInRange和textViewDidChange方法如下所示: func textViewDidChange(textView: UITextView) { dispatch_async(dispatch_get_main_queue(), { textView.selectedR

我的应用程序中有UITextView,它应该包含一个不可编辑且可单击的后缀categoryString,类似于。我的shouldChangeTextInRange和textViewDidChange方法如下所示:

    func textViewDidChange(textView: UITextView) {

            dispatch_async(dispatch_get_main_queue(), {

                textView.selectedRange = NSMakeRange(self.globalInt, 0)

               //On long press backspace, something goes wrong with
               //NSMutableAttributedString, so I just clear textView
               //and set it's text to categoryString again:

                if(!textView.text.hasSuffix(self.categoryString)){

                    self.globalInt = 0

                    self.postTextView.font = Constants.Fonts.postTextCategory
                    textView.text = self.categoryString
                    textView.selectedRange = NSMakeRange(0,0)

                }
            })


            self.myMutableString = NSMutableAttributedString(string: self.postTextView.text, attributes: [NSFontAttributeName:Constants.Fonts.postTextCategory!])
            self.myMutableString.addAttribute(NSFontAttributeName, value: Constants.Fonts.postText!, range: NSRange(location: 0, length: maxGlobalInt))
            self.postTextView.attributedText = self.myMutableString

        }

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

            var tempText : NSString = text
            var currentText : NSString = textView.text

            var textToReturn = currentText.length + (tempText.length - range.length)

            if(text == "\n"){
                textView.resignFirstResponder()
            }

            var signatureLength = count(categoryString)

            globalInt = textToReturn - signatureLength
            maxGlobalInt = textToReturn - signatureLength

            if(range.location >  textToReturn - signatureLength){
                return false
            }else{

                return textToReturn <= 160 + signatureLength
            }

        }
这就解决了我的问题,光标位置总是可以的,但我有一个新的问题-表情符号不能正确显示:

我认为这是因为表情符号的字符长度,但我不知道如何解决这个问题


第二个问题:如何使UITextView的不可编辑部分可单击?您可以使用UITapGestureRecognitiser,而不是在此处设置光标

是否检查了UITextField leftView和rightView属性?使用它我们可以设置左侧或骑乘侧图像。阅读问题,他使用的是UITextView,它没有leftView/rightView属性。
dispatch_async(dispatch_get_main_queue(), {
        self.globalInt = range.location + 1

        if(count(text) == 0){
            self.globalInt = self.globalInt - 1
        }else{
            self.globalInt = range.location + 1
        }
    })