使用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平台,所以我真的可以使用建议。
答案 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++
}
}
}
}