如何设置 UITextField 的自定义光标位置?
How to set custom cursor position of UITextField?
当用户点击 UITextFiled 时,光标位于起点,出于设计目的,它看起来不太好。所以,我想更改光标 +5 的位置或从 UITextField 的中心开始。
我已经实现了从 Github 中找到的这段代码,但仍然无法正常工作。如果你能指导我如何解决这个问题,请帮助我。
我的代码如下
#import "UITextField+Selection.h"
@implementation UITextField (Selection)
- (NSRange)selectedRange
{
UITextPosition* beginning = self.beginningOfDocument;
UITextRange* selectedRange = self.selectedTextRange;
UITextPosition* selectionStart = selectedRange.start;
UITextPosition* selectionEnd = selectedRange.end;
NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];
NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];
return NSMakeRange(location, length);
}
- (void)setSelectedRange:(NSRange)range
{
UITextPosition* beginning = self.beginningOfDocument;
UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];
UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];
UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition];
[self setSelectedTextRange:selectionRange];
}
#import "UITextField+Selection.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.nameTextField setSelectedRange:NSMakeRange(5,0)]; // Category method called
}
@end
您可以像这样在 UITextFiled 的左侧添加填充,而不是移动光标以使设计看起来更好
UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 20)];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;
如果您想在用户选择 UITextField
时自定义光标位置,您需要注册用户选择 UITextField
时发布的通知。
因此您可以通过以下方式将自己添加为观察者(例如在 viewDidLoad
方法中):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldSelected) name:UITextFieldTextDidBeginEditingNotification object:nil];
然后在textFieldSelected
方法中你可以:
- (void)textFieldSelected {
[self.nameTextField setSelectedRange:NSMakeRange(5,0)];
}
出于设计目的,您可以将 Image 放在 UITextview 后面,将 textview 放在 UIImage view 上面。它看起来很适合设计
当用户点击 UITextFiled 时,光标位于起点,出于设计目的,它看起来不太好。所以,我想更改光标 +5 的位置或从 UITextField 的中心开始。
我已经实现了从 Github 中找到的这段代码,但仍然无法正常工作。如果你能指导我如何解决这个问题,请帮助我。
我的代码如下
#import "UITextField+Selection.h"
@implementation UITextField (Selection)
- (NSRange)selectedRange
{
UITextPosition* beginning = self.beginningOfDocument;
UITextRange* selectedRange = self.selectedTextRange;
UITextPosition* selectionStart = selectedRange.start;
UITextPosition* selectionEnd = selectedRange.end;
NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];
NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];
return NSMakeRange(location, length);
}
- (void)setSelectedRange:(NSRange)range
{
UITextPosition* beginning = self.beginningOfDocument;
UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];
UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];
UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition];
[self setSelectedTextRange:selectionRange];
}
#import "UITextField+Selection.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.nameTextField setSelectedRange:NSMakeRange(5,0)]; // Category method called
}
@end
您可以像这样在 UITextFiled 的左侧添加填充,而不是移动光标以使设计看起来更好
UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 20)];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;
如果您想在用户选择 UITextField
时自定义光标位置,您需要注册用户选择 UITextField
时发布的通知。
因此您可以通过以下方式将自己添加为观察者(例如在 viewDidLoad
方法中):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldSelected) name:UITextFieldTextDidBeginEditingNotification object:nil];
然后在textFieldSelected
方法中你可以:
- (void)textFieldSelected {
[self.nameTextField setSelectedRange:NSMakeRange(5,0)];
}
出于设计目的,您可以将 Image 放在 UITextview 后面,将 textview 放在 UIImage view 上面。它看起来很适合设计