在iOS7中点击取消按钮后,UISearchBar的自定义InputView不起作用

时间:2013-10-06 16:59:10

标签: ios7 uisearchbar inputview

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

所以我写了以下代码。

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不再有效。

我不知道为什么会这样?

我该如何解决?

1 个答案:

答案 0 :(得分:1)

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

在我的应用中,键盘会根据搜索栏的选定范围进行更改:

  • scope == 0显示我的CustomKeyboard
  • 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];
}

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