在 UISearchbar iOS 中 selectedTextRange 返回 nil
Posted
技术标签:
【中文标题】在 UISearchbar iOS 中 selectedTextRange 返回 nil【英文标题】:selectedTextRange return nil in UISearchbar iOS 【发布时间】:2015-05-20 03:51:03 【问题描述】:我有一个UISearchBar
,我得到了UITextfield
,然后我想设置选定的文本范围,但它总是返回零。这是我的代码:
UITextField *searchField = [self.searchBar valueForKey:@"_searchField"];
[searchField becomeFirstResponder]; // focus to this searchfield
然后我填写文字:
self.searchBar.text = @"This is text";
并检查UITextField
文本是否已填写。尽管如此,所有关于UITextPosition
和UITextRange
的方法都返回nil:
UITextRange *selectedRange = [searchField selectedTextRange]; //selectedRange = nil
UITextPosition *newPosition = [searchField positionFromPosition:selectedRange.start offset:addressToComplete.street.length]; //newPosition = nil
UITextRange *newRange = [searchField textRangeFromPosition:newPosition toPosition:newPosition]; //newRange = nil
我的代码有问题吗?
【问题讨论】:
你确定searchField
不是nil
?
是的,我确定它不是 nil
阅读selectedTextRange
的文档。它说如果没有选择它会返回nil
。调用这些方法时文本字段是否有焦点?
是的,我首先通过调用 [searchField becomeFirstResponder] 将焦点设置到此文本字段;我已经更新了我的问题。你知道我的代码有什么问题吗?不明白为什么会这样。
【参考方案1】:
您是否尝试过记录UITextField *searchField
?从外观上看它为零..我认为您的代码应该是..
(UITextField *)[self.searchBar valueForKey:@"_searchField"]
([在尝试您的代码之后] OooOoKayyy.. 它可以工作.. 哈哈哈..)顺便说一句,这就是我在 searchBar 中获取 UITextField 的方式..
for (id object in [[[self.searchBar subviews] objectAtIndex:0] subviews])
if ([object isKindOfClass:[UITextField class]])
UITextField *searchField = (UITextField *)object;
break;
首先我尝试了你所拥有的:
UITextField *searchField = (UITextField *)[searchBar valueForKey:@"_searchField"];
searchBar.text = @"This is text";
// and logging your searchField.text here.. returns nil/empty..
我试着像这样重新排列它......
searchBar.text = @"This is text";
UITextField *searchField = (UITextField *)[searchBar valueForKey:@"_searchField"];
NSLog(@"searchFields.text :%@", searchField.text);
我再次在-(void)viewDidLoad
下尝试了您的代码,但不好,是的,正如您所说,它总是 nil.. 现在看起来像这样..
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
searchBar.text = @"This is text"; // not important
UITextField *searchField = [searchBar valueForKey:@"_searchField"];
[searchField becomeFirstResponder];
UITextRange *selectedRange = [searchField selectedTextRange]; //selectedRange = not nil anymore
NSLog(@"searchField.text :%@ -> selectedRange :%@\n\n" , searchField.text, selectedRange);
//i've also tried it inside uibutton's event and i worked .. >.<
我以编程方式选择了TextRange(出于示例目的),可能它与xibs自动布局或其他东西有关(奇怪的是我没有体验过)但它就在那里,试试吧.. :)
希望对你有所帮助..
编码愉快..干杯!
【讨论】:
谢谢,但它仍然无法正常工作。我记录了搜索字段,并确保它不是零。顺便说一句,我的搜索栏是 XIB 的出口,这可能是原因吗? @NTNT.. 我再次尝试了您的代码,是的,我也认为这是由 Xibs 自动布局引起的.. 嗯.. 我将您的代码放在里面:- (void)viewDidLayoutSubviews [super viewDidLayoutSubviews];
我会编辑我的答案..
谢谢。但是你如何尝试uibutton的事件?我把它写在1个事件中但是当调用那个事件时,它仍然显示为零。我还尝试将我的代码放在 viewDidLayoutSubviews 中,并且成功了!所以压力...以上是关于在 UISearchbar iOS 中 selectedTextRange 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
如何在iOS 7中更改文本UISearchBar的取消按钮颜色?
在 iOS 8 中更改 UISearchBar 取消按钮文本