我开始开发iOS8和objective-c的自定义键盘。我想创建一个删除按钮,在插入点,单击时删除单个字符,并在按住按钮时删除整个单词。 deleteBackward似乎删除了一个字符,但在Apple开发者文档中我发现:
要让您在调用deleteBackward方法时确定要删除的文本数量,请从textDocumentProxy属性的documentContextBeforeInput属性获取插入点附近的文本上下文,如下所示:
NSString *precedingContext = self.textDocumentProxy.documentContextBeforeInput;
然后您可以删除您认为合适的内容 - 例如, 一个字符,或者一切都回到空白字符。
但我不明白如何实现这个目标......有没有办法删除一个完整的单词?
编辑:我找到了解决方案......它是documentContextBeforeInput上的简单标记:-(void)pressDeleteKey{
NSArray *tokens = [self.textDocumentProxy.documentContextBeforeInput componentsSeparatedByString:@" "];
for (int i = 0; i < [[tokens lastObject] length];i++) {
[self.textDocumentProxy deleteBackward];
}
}
答案 0 :(得分:3)
Swift 1.2解决方案:
extension String {
var length : Int {
get{
return count(self)
}
}
}
func deleteLastWord() {
if let textArray:[String]? = proxy.documentContextBeforeInput?.componentsSeparatedByString(" "){
if let validArray = textArray{
for var i=0; i<validArray.last!.length; i++ {
proxy.deleteBackward()
}
}
}
}
答案 1 :(得分:0)
我也在寻找这个问题的答案。 直到现在,我必须使用for循环逐字母删除。
答案 2 :(得分:0)
可能最好和唯一的下注是逐字逐句char,直到你的&#34; word&#34;已被删除。
而不是依赖&#34;空格&#34;我会尝试枚举像这样的子串中的字符串:
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords | NSStringEnumerationLocalized usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
// Do whatever you want with the words (substrings)
[words addObject:@[substring, [NSValue valueWithRange:substringRange]]];
}];
然后向后删除您找到的范围内的相应字符数。
来自Apple的官方文档:
使用
UITextDocumentProxy
时,您将没有简单的方法来删除范围,子字符串或其他任何可能让您的生活更方便的文本。只需编写自己的方法!快乐的编码!
..大声笑