【问题标题】:pressing backspace once deletes everything in the uisearchbar按退格键一次会删除 uisearchbar 中的所有内容
【发布时间】: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 中,然后按退格键,它可以正常工作。

更新:到目前为止,我发现调用 resignFirstResponderbecomeFirstResponder 会导致这些奇怪的行为。问题是我为我的自动完成搜索栏设置了becomeFirstResponder,因此用户在输入第一个字母后不必再次单击它。但这也会导致自动完成搜索栏删除每个字符。我想知道是否有办法检测退格字符。它会解决我的问题。

【问题讨论】:

  • 我认为这是 UISearchField 中的默认行为。
  • 不,iPhone 屏幕键盘上的退格键不会删除所有内容。

标签: iphone objective-c autocomplete uisearchbar


【解决方案1】:

我决定使用 2 个 UISearchDisplayController 对象。当用户在searchBarShouldBeginEditing 方法中开始搜索时,我创建一个搜索显示控制器,然后在searchDisplayControllerDidEndSearch 中释放搜索显示控制器。这是稍微简化的版本,我还使用动画将第二个搜索栏移动到视图顶部,然后再为其激活搜索显示控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2017-12-14
    • 1970-01-01
    • 2016-10-14
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多