在Swift中获取光标前的字符

昨天我正在努力获取和设置UITextField的光标位置 。 现在我试图在光标位置之前获取角色。 所以在下面的例子中,我想要返回一个“e”。

在此处输入图像描述

 func characterBeforeCursor() -> String 

笔记

  • 我没有看到任何与此相同的其他SO问题,但也许我错过了它们。

  • 我先写了这个问题,当我找到答案时,我会同时发布问题和答案。 当然,欢迎更好的答案。

  • 我说“字符”但String很好。

如果光标正在显示并且位置之前的位置有效,则获取该文本。 感谢这个答案的一些提示。

 func characterBeforeCursor() -> String? { // get the cursor position if let cursorRange = textField.selectedTextRange { // get the position one character before the cursor start position if let newPosition = textField.position(from: cursorRange.start, offset: -1) { let range = textField.textRange(from: newPosition, to: cursorRange.start) return textField.text(in: range!) } } return nil } 

在此处输入图像描述

的结果

 if let text = characterBeforeCursor() { print(text) } 

根据你的例子,是“e”。

你也可以用这个:

 NSInteger endOffset = [textfld offsetFromPosition:textfld.beginningOfDocument toPosition:range1.end]; NSRange offsetRange = NSMakeRange(endOffset-1, 1); NSString *str1 = [textfld.text substringWithRange:offsetRange]; NSLog(@"str1= %@",str1); 

在swift你可以使用

 let range1 : UITextRange = textField.selectedTextRange! let endoffset : NSInteger = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: range1.end) let offsetRange : NSRange = NSMakeRange(endoffset-1, 1) let index: String.Index = (textField.text?.startIndex.advancedBy(offsetRange.location))! let str1 : String = (textField.text?.substringFromIndex(index))! let index1 : String.Index = str1.startIndex.advancedBy(1) let str2: String = str1.substringToIndex(index1) print(str2)