Sun*_*314 24 iphone textselection uitextfield iphone-sdk-3.0
我的iPhone应用程序中有一个UITextField.我知道如何使文本字段选择其所有文本,但如何更改选择?假设我想选择最后5个字符,或者特定范围的字符,那可能吗?如果没有,我可以移动标记选择开始和结束的线条,就好像用户正在拖动它们一样吗?
nac*_*o4d 31
使用UITextField,你不能.但是如果你看到标题,你有_selectedRange和其他可能在你添加一些类别时使用的;)
现在UITextField和UITextView符合UITextInput协议,所以它是可能的:)
在插入符号之前选择最后5个字符将是这样的:
// Get current selected range , this example assumes is an insertion point or empty selection
UITextRange *selectedRange = [textField selectedTextRange];
// Calculate the new position, - for left and + for right
UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:-5];
// Construct a new range using the object that adopts the UITextInput, our textfield
UITextRange *newRange = [textField textRangeFromPosition:newPosition toPosition:selectedRange.start];
// Set new range
[textField setSelectedTextRange:newRange];
Run Code Online (Sandbox Code Playgroud)
Ant*_*tox 13
要选择特定范围的字符,您可以在iOS 5+中执行此类操作
int start = 2;
int end = 5;
UITextPosition *startPosition = [self positionFromPosition:self.beginningOfDocument offset:start];
UITextPosition *endPosition = [self positionFromPosition:self.beginningOfDocument offset:end];
UITextRange *selection = [self textRangeFromPosition:startPosition toPosition:endPosition];
self.selectedTextRange = selection;
Run Code Online (Sandbox Code Playgroud)
由于UITextFields和其他UIKit元素具有自己的私有子类,UITextPosition并且UITextRange您无法直接创建新值,但您可以使用文本字段为您创建它们,从引用到文本的开头或结尾以及整数偏移量.
您也可以反向获取当前选择的起点和终点的整数表示:
int start = [self offsetFromPosition:self.beginningOfDocument toPosition:self.selectedTextRange.start];
int end = [self offsetFromPosition:self.beginningOfDocument toPosition:self.selectedTextRange.end];
Run Code Online (Sandbox Code Playgroud)
这是一个类别,它添加了使用NSRanges 处理选择的方法.https://gist.github.com/4463233
要选择没有文件扩展名的文件名,请使用以下命令:
-(void) tableViewCellDidBeginEditing:(UITableViewTextFieldCell*) cell
{
NSInteger fileNameLengthWithoutExt = [self.filename length] - [[self.filename pathExtension] length];
UITextField* textField = cell.textField;
UITextPosition* start = [textField beginningOfDocument];
UITextPosition* end = [textField positionFromPosition:start offset: fileNameLengthWithoutExt - 1]; // the -1 is for the dot separting file name and extension
UITextRange* range = [textField textRangeFromPosition:start toPosition:end];
[textField setSelectedTextRange:range];
}
Run Code Online (Sandbox Code Playgroud)