UISearchBar 的自定义输入视图在 iOS7 中点击取消按钮后不起作用



在我的iOS应用程序中,我需要为iOS7中的UISearchBar设置自定义inputView

所以我写了以下代码。

NSArray *searchBarSubViews = [[self.sBar.subviews objectAtIndex:0] subviews];
            for(int i =0; i<[searchBarSubViews count]; i++) {
                if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
                {
                    UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
                    [search setFont:[UIFont fontWithName:@"CustomFont" size:15]];
                    search.delegate = self;
                    [search setInputView:self.customKeyboard];
                    [self.customKeyboard setTextView:search];
                }
            }

它工作正常。但是,当我使用自定义键盘键入并点击"取消按钮"以resignFirstResponder.

我再次点击UISearchBar,我无法在UISearchBar中键入任何文本,包括母语为英语的键盘。

而且取消按钮被隐藏了,UISearchBar不再工作。

我不知道为什么会这样?

我该如何解决?

我尝试了您的代码,它在我的应用程序中运行良好。事实上,感谢和祝贺似乎是有序的,因为出于某种原因,您似乎已经解决了本网站上其他人必须构建更详细的解决方法的问题。

在我的应用程序中,键盘会根据搜索栏的选定范围而变化:

  • 范围 == 0 显示我的自定义键盘
  • scope != 0 表示通常的 iPhone 键盘。

我的代码实现如下所示:

-(UITextField *)textFieldFormSearchBar{
NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews];
for(int i =0; i<[searchBarSubViews count]; i++) {
    if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
    {
        UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
        return search;
    }
}
return nil;
}
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{
if (searchBar.selectedScopeButtonIndex==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
return YES;
}
-(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{
if (selectedScope==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
[self.textFieldFormSearchBar reloadInputViews];
}
-(BOOL)searchBarShouldEndEditing:(HDLSearchBar *)searchBar{
if (self.customKeyboard) {
    [self.customKeyboard removeFromSuperview];
}
return [self.textFieldFormSearchBar resignFirstResponder];
}

可能不是最有效的方法,但它可以解决问题。我希望你能找到一些可以帮助你解决问题的东西。

最新更新