以编程方式selectUITextField中的所有文本

如何以编程方式selectUITextField中的所有文本?

原来,调用-selectAll:用非零发送者显示菜单。 用nil调用它会导致它select文本,但不显示菜单。

在我从苹果公司回来的错误报告后,我尝试了这个build议,我通过零而不是自我。

无需使用UIMenuController或其他selectAPI。

那是什么对我来说:

[self.titleField setSelectedTextRange:[self.titleField textRangeFromPosition:self.titleField.beginningOfDocument toPosition:self.titleField.endOfDocument]]; 

相当丑陋,但它的工作原理,所以不会显示sharedMenuController!

要修复“每秒只能工作”的问题,请使用以下内容:

  __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ __strong __typeof(weakSelf) strongSelf = weakSelf; UITextRange *range = [strongSelf textRangeFromPosition:strongSelf.beginningOfDocument toPosition:strongSelf.endOfDocument]; [strongSelf setSelectedTextRange:range]; }); 

感谢Eric Baker(刚刚在这里发表评论)

我只是testing了这个来validation上面的Mirko的注释,但是我的testingvalidation了selectAll:实际上是在发送到UITextField本身时select所有的文本。

请注意,文本将立即被CUT |遮盖 COPY | 粘贴操作,但对于你的问题,这正是当用户点击“全选”开始时显示的内容。

我要做的解决scheme如下,请注意,第二行将暂时隐藏CUT / COPY / PASTE对话框,而不禁用它以显式用户select

 [_myTextField selectAll:self]; [UIMenuController sharedMenuController].menuVisible = NO; 

使用你所需要的

  [yourtextField becomeFirstResponder]; //puts cursor on text field [yourtextField selectAll:nil]; //highlights text [yourtextField selectAll:self]; //highlights text and shows menu(cut copy paste) 

迅速

selectUITextField所有文本:

 textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument) 

我的完整答案在这里 。

这是我find的最好的解决scheme。 没有sharedMenuController,它连续工作:

  -(void)textFieldDidBeginEditing:(UITextField *)textField { [textField performSelector:@selector(selectAll:) withObject:nil afterDelay:0.1]; } 

为了能够select文本,文本字段必须是可编辑的。 要知道文本字段何时可编辑,请使用委托方法:

 - (void)textFieldDidBeginEditing:(UITextField *)textField - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

我不认为textFieldShouldBeginEditing:是必需的,但这是我在我的实现中使用。

 - (void)textFieldDidBeginEditing:(UITextField *)textField{ [textField selectAll:textField]; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ return YES; } 

传入nil来selectAll:不会显示菜单。

Swift 3:

 textField.selectAll(self) 

不幸的是我不认为你可以这样做。

我不确定这是否对您setClearsOnBeginEditing帮助,但setClearsOnBeginEditing允许您指定在用户开始编辑时(这是安全UITextFields的默认值), UITextField应该删除现有值。

 UITextField *tf = yourTF; // hide cursor (you have store default color!!!) [[tf valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"]; // enable selection [tf selectAll:self]; // insert your string here // and select nothing (!!!) [tf setMarkedText:@"Egor" selectedRange:NSMakeRange(0, 0)]; 

完成!

我创build了一个自定义的警报视图,其中包含一个UITextField 。 我发现文本字段的一个问题是:如果将textfield添加到屏幕, becomeFirstResponder将调用becomeFirstResponderbecomeFirstResponder仅具有值。

否则beginningOfDocument返回nil[UITextField textRangeFromPosition:]不能得到值。

所以这里是我的示例代码来解决这种情况。

 UIWindow *window = [[[UIApplication sharedApplication] windows] firstObject]; [window addSubview:theAlertView]; // textfield must be added as a subview of screen first UITextField *textField = theAlertView.textField; [textField becomeFirstResponder]; // then call to show keyboard and cursor UITextRange *range = [textField textRangeFromPosition:textField.beginningOfDocument toPosition:textField.endOfDocument]; // at this time, we could get beginningOfDocument [textField setSelectedTextRange:range]; // Finally, it works!!! 

如果你的意思是你如何让用户编辑uitextfield中的文本,那么只需指定firstResponder:

 [textField becomeFirstResponder] 

如果你的意思是你如何获得uitextfield中的文本比这将做到这一点:

 textField.text 

如果你的意思是实际select文本(如突出显示),那么这可能是有用的:

全选