您好我有一个非常奇怪的错误:如果我按下键盘上的退格键,在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
,因此用户在输入第一个字母后不必再次单击它。但它也会导致自动完成搜索栏删除每个字符。我想知道是否有办法检测退格字符。它会解决我的问题。
答案 0 :(得分:0)
我决定使用2个UISearchDisplayController对象。当用户以searchBarShouldBeginEditing
方法开始搜索时,我创建了一个搜索显示控制器,然后在searchDisplayControllerDidEndSearch
中我释放了搜索显示控制器。这是稍微简化的版本我还使用动画将第二个搜索栏移动到视图的顶部,然后激活它的搜索显示控制器。