我需要调整UiTextField行为,以便我可以以编程方式插入一些星号并将光标移动到字符串的开头; 我尝试了“粘贴”技巧(http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html),但光标移动到最后。 我试图实现的效果是这样的: 一开始:
然后用户插入字符 F***** FO **** FOO *** 等...
这是可能的,还是我要做的调整不值得付出努力?
感谢名单
-G -
答案 0 :(得分:7)
<强>更新强>
在iOS5及更高版本中可以执行此操作,因为UITextField和UITextView符合UITextInput协议。请看一下:“Can I select a specific block of text in a UITextField?”例如:)。
希望有所帮助
OLD ANSWER:(iOS4.x及以下版本):
使用公共API(我不知道)无法实现此目的。 但是我发现了一些私有方法:(可能是未记录的方法,因为它们没有私有方法通常具有的下划线前缀)
selectionRange
setSelectionRange:
下面的代码工作正常(至少在模拟器4.3中),我正在使用KVC,所以我可以避免恼人的警告。 (self
是UITextField
)
- (void) moveToRight{
NSRange selectedRange = [[self valueForKey:@"selectionRange"] rangeValue];
if (selectedRange.location != NSNotFound) {
if (selectedRange.length > 0) {
selectedRange.location = NSMaxRange(selectedRange);
selectedRange.length = 0;
}else if (selectedRange.location < self.text.length) {
selectedRange.location += 1;
}
[self setValue:[NSValue valueWithRange:selectedRange] forKey:@"selectionRange"];
}
}
- (void) moveToLeft{
NSRange selectedRange = [[self valueForKey:@"selectionRange"] rangeValue];
if (selectedRange.location != NSNotFound) {
if (selectedRange.length > 0) {
selectedRange.length = 0;
}else if (selectedRange.location > 0) {
selectedRange.location -= 1;
}
[self setValue:[NSValue valueWithRange:selectedRange] forKey:@"selectionRange"];
}
}
由于这些不是公共API,使用风险自负,我不知道他们是否会通过Apple的审核。
顺便说一句: 我发现他们使用:
#import "/usr/include/objc/objc-runtime.h"
unsigned int methodCount = 0;
Method *mlist = class_copyMethodList([UITextField class], &methodCount);
for (int i = 0; i < methodCount; ++i){
NSLog(@"%@", NSStringFromSelector(method_getName(mlist[i])));
}