我正在尝试模拟 iOS Safari 中地址栏的行为 - 也就是说,如果点击地址栏中有文本,则会选择该文本。大多数桌面浏览器的工作方式也大致相同。我不想在选择时清除它,只需选择里面的内容,这样如果用户开始输入,它就会清除,但用户也可以根据需要编辑现有字符串。
我尝试了以下方法,它在 iOS7 和 iOS6 下的 subview 中找到了 UISearchBarTextField
,但是在其上调用 selectAll
似乎没有任何效果。我尝试过更改其 text
属性,效果很好,只是 selectAll
不太满意。
我还尝试将 selectAll:
的参数更改为 self
以及其他一些内容,没有更改,只是不想选择其中的文本!
有什么想法吗?这是我的代码:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
NSArray *subviews = [UIDevice isRunningiOS7OrAbove]
? [[searchBar.subviews objectAtIndex:0] subviews]
: searchBar.subviews;
for (UIView *subview in subviews) {
if ([subview conformsToProtocol:@protocol(UITextInputTraits)]) {
UITextField *textField = (UITextField *)subview;
[textField selectAll:textField];
}
}
}
编辑
我也尝试过这个,但没有什么乐趣:
for (UIView *subview in subviews) {
if ([subview conformsToProtocol:@protocol(UITextInputTraits)]) {
UITextField *textField = (UITextField *)subview;
[textField setSelectedTextRange:[textField textRangeFromPosition:[textField beginningOfDocument]
toPosition:[textField endOfDocument]]];
}
}
最佳答案
您可以使用:[UITextField setSelectedTextRange:(UITextRange *)]
- (void)textFieldDidBeginEditing:(UITextField*)textField {
UITextPosition *start = [textField beginningOfDocument];
UITextPosition *end = [textField endOfDocument];
UITextRange *range = [textField textRangeFromPosition:start toPosition:end];
[textField setSelectedTextRange:range];
}
现在您可以使用UISearchBar
来实现...
关于ios - 在开始编辑时选择 UISearchBar 中的所有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21281439/