【发布时间】:2010-11-09 10:11:18
【问题描述】:
您好,我有一个非常奇怪的错误:在UISearchBar 控件中,如果我按下键盘上的退格键,而不是文本字段上的灰色 X,而是屏幕键盘上的键,它会一个一个地删除每个字符。就好像我反复按了键,直到文本字段被清除,但我只按了一次。
详情:
我认为问题在于以下两种方法,但我不确定。
在一个视图中,我有 2 个 uisearchbar 对象。在 UISearchBarDelegate 的视图控制器中,我有一个 textDidChange 方法:
- (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
// called when text changes (including clear)
{
[searchBar resignFirstResponder];
debugLog(@"SearchViewController textDidChange");
AutoCompleteViewController *acvc = [[AutoCompleteViewController alloc] initWithNibName: @"AutoCompleteViewController" bundle: [NSBundle mainBundle]];
acvc.searchBar = searchBar;
acvc.datasource = self;
[self presentModalViewController: acvc animated:TRUE];
[acvc release];
}
类AutoCompleteViewController 有另一个UISearchBar 和一个UITableView。该类还实现了UISearchBarDelegate,并在他的textDidChange 中向代理询问UISearchBar 中输入的文本的字符串列表。
- (void) searchBar:(UISearchBar *) _searchBar textDidChange:(NSString *)searchText
{
debugLog(@"AutoCompleteViewController textDidChange");
if (shouldReloadResults)
{
[autoCompleteValues release];
autoCompleteValues = [datasource valuesForSearchString:self : _searchBar.text];
[autoCompleteValues retain];
[acResultsTable reloadData];
}
}
因此,如果我在主视图中选择一个搜索栏并按一次退格键,它会删除第一个字母,显示自动完成视图,然后开始删除所有其他字符,同时显示每个字符的自动完成结果,直到搜索栏为空。我只按了退格键一次。我也有其他方法,但我认为这些是相关的,但我不知道出了什么问题。如果我已经在AutoCompleteViewController 中,然后按退格键,它可以正常工作。
更新:到目前为止,我发现调用 resignFirstResponder 和 becomeFirstResponder 会导致这些奇怪的行为。问题是我为我的自动完成搜索栏设置了becomeFirstResponder,因此用户在输入第一个字母后不必再次单击它。但这也会导致自动完成搜索栏删除每个字符。我想知道是否有办法检测退格字符。它会解决我的问题。
【问题讨论】:
-
我认为这是 UISearchField 中的默认行为。
-
不,iPhone 屏幕键盘上的退格键不会删除所有内容。
标签: iphone objective-c autocomplete uisearchbar