首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择使用replaceRange更新的文本(范围: UITextRange,withText: String)

选择使用replaceRange更新的文本(范围: UITextRange,withText: String)
EN

Stack Overflow用户
提问于 2016-06-04 21:07:05
回答 1查看 1.3K关注 0票数 0

我正在用以下代码更改UITextView的内容:

代码语言:javascript
复制
mainTextField.replaceRange((theRange), withText: newStr)

然后我想选择新的文本。我试图使用以下代码:

代码语言:javascript
复制
mainTextField.becomeFirstResponder()

let startPosition = mainTextField.positionFromPosition(mainTextField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: startingPoint)
let endPosition = mainTextField.positionFromPosition(mainTextField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: endingPoint)

 if startPosition != nil && endPosition != nil {
    mainTextField.selectedTextRange = mainTextField.textRangeFromPosition(startPosition!, toPosition: endPosition!)
 }

问题是我不知道如何获得startingPoint和endingPoint值。是否可以从replaceRange(range: UITextRange,withText: String)语句中获得它们?

编辑:试图澄清一点我的问题:

代码语言:javascript
复制
// mainTextField content = "Have a good day"
// mainTextField selected text = "good"

mainTextField.replaceRange((theRange), withText: "happy")
// here theRange refers the selected text "good" not the new one "happy"

如何选择新的文本(“快乐”)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-05 16:22:40

您只需要使用字符串的长度来确定所选内容的UITextRange。例如:

代码语言:javascript
复制
extension UITextView // I created this become sometimes it's nice to work with NSRange rather than UITextRange but it's not necessary for your problem.
{
    func textRangeFromNSRange(range:NSRange) -> UITextRange?
    {
        let beginning = self.beginningOfDocument
        guard let start = self.positionFromPosition(beginning, offset: range.location), end = self.positionFromPosition(start, offset: range.length) else { return nil}

        return self.textRangeFromPosition(start, toPosition: end)
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!

    override func viewDidAppear(animated: Bool) {
            super.viewDidAppear(animated)
            self.textView.selectable = true
            self.textView.text = "the quick brown fox jumped over the lazy dog"
            let range = self.textView.textRangeFromNSRange(NSRange(location: 0, length: 3))!
            let text = "how now brown cow"
            self.textView.replaceRange(range, withText: text)
            self.textView.selectedTextRange = textView.textRangeFromPosition(range.start, toPosition: textView.positionFromPosition(range.start, offset: text.characters.count)!) //should probably break this into multiple lines for better readability
            self.textView.becomeFirstResponder()


           }
}

在上面的例子中," the“将改为"how now布朗牛”,"how now brown奶牛“将被选中。我使用一个方便的函数将一个NSRange转换为一个UITextRange。范围将从索引0开始,然后转到3个字符(" The ")。我用“现在是棕色牛”来代替它。然后使用前面的UITextRange和替换字符串来构造一个新的UITextRange (textView.textRangeFromPosition(range.start, toPosition: textView.positionFromPosition(range.start, offset: text.characters.count)!))。然后设置为textView的selectedTextRange。您应该确保您的UITextView是可选的,然后调用becomeFirstResponder on yourUITextView` `。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37635032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档