Iphone 在UiTextField中以编程方式移动光标

Iphone 在UiTextField中以编程方式移动光标,iphone,cocoa-touch,uitextfield,Iphone,Cocoa Touch,Uitextfield,我需要调整UiTextField的行为,这样我就可以通过编程插入一些星号,并在字符串的开头移动光标; 我尝试了“粘贴”技巧(,但光标在最后移动。 我试图达到的效果如下: 一开始: 然后用户插入字符 f***** fo**** 福*** 等等 这是可能的还是我所做的调整不值得努力 塔克斯 -G-更新: 在iOS5和更高版本中,可以执行此操作,因为UITextField和UITextView符合协议。请查看以下内容:“例如:”) 希望能有帮助 旧答案:(iOS4.x及以下版本): 使用公共API

我需要调整UiTextField的行为,这样我就可以通过编程插入一些星号,并在字符串的开头移动光标; 我尝试了“粘贴”技巧(,但光标在最后移动。 我试图达到的效果如下: 一开始:


然后用户插入字符 f***** fo**** 福*** 等等

这是可能的还是我所做的调整不值得努力

塔克斯


-G-

更新:

在iOS5和更高版本中,可以执行此操作,因为UITextField和UITextView符合协议。请查看以下内容:“例如:”)

希望能有帮助


旧答案:(iOS4.x及以下版本):

使用公共API无法实现这一点(我不知道)。 然而,我发现了几个私有方法:(可能是未记录的方法,因为它们没有私有方法通常具有的下划线前缀)

下面的代码工作正常(至少在模拟器4.3中是这样),我使用KVC可以避免恼人的警告。(
self
UITextField
的子类的实例)

-(无效)移动右侧{
NSRange selectedRange=[[self valueForKey:@“selectionRange”]rangeValue];
if(selectedRange.location!=NSNotFound){
如果(selectedRange.length>0){
selectedRange.location=NSMaxRange(selectedRange);
selectedRange.length=0;
}else if(selectedRange.location0){
selectedRange.length=0;
}else if(selectedRange.location>0){
selectedRange.location-=1;
}
[self setValue:[NSValue valueWithRange:selectedRange]forKey:@“selectionRange”];
}
}
由于这些不是公共API,使用风险自负,我不知道它们是否能通过苹果的审查

顺便说一句: 我发现他们使用:

#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])));
}
#导入/usr/include/objc/objc runtime.h”
无符号int methodCount=0;
方法*mlist=class\u copyMethodList([UITextField class],&methodCount);
对于(int i=0;i
非常好。谢谢分享。
- (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"];
    }
}
#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])));
}