在UISearchBar中,无法在单击搜索按钮时隐藏键盘

4

我正在使用一个 UISearchBar 来搜索列表,但是当我点击键盘上的搜索按钮时,键盘不会隐藏。
请帮我解决这个问题。
这是我的代码

-(void)search:(UISearchBar*)searchbar Text:(NSString*)text
{
    [copyListOfItems removeAllObjects];
    if([text length] > 0) {
    //  [ovController.view removeFromSuperview];
    searching = YES;
    NSString *searchText = searchBar.text;
           for(imergencyData *objtrust in aryTrustee)
          {
          NSRange titleResultsRange = [objtrust.strName rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
            [copyListOfItems addObject:objtrust];
    }
    NSLog(@"number of object found %d",copyListOfItems.count);
}
else
    {
    //  [tblTrustee insertSubview:ovController.view   aboveSubview:self.parentViewController.view];
    [searchbar resignFirstResponder];
    searching = NO;
    //tblTrustee.scrollEnabled = NO;
}
[tblTrustee reloadData];
}

-(void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar
 {
       [aSearchBar resignFirstResponder];
       [self.view endEditing:YES];
 }

 //Method call when type text in search box
-(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
        [self search:theSearchBar Text:searchText];

}
//method call when on search button
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBa{
        [searchBa endEditing:YES];
        [searchBa resignFirstResponder];
        [self search:searchBa Text:searchBar.text];

}

请在您的问题中添加更多描述,例如您的代码示例,以便其他人能够帮助您解决问题。 - art-divin
8个回答

4

将这行代码放入并尝试执行:

- (void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar {
  [aSearchBar resignFirstResponder];
  [self.view endEditing:YES];
}

(或者) 编辑:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
      [searchBar resignFirstResponder];
      [self.view endEditing:YES];
  }

现在检查一下它是否有效,将其放置在searchBarTextDidEndEditing方法中。 - Balu
不,它不起作用是因为上面的委托没有在搜索按钮点击时调用。 - Dhiraj Umale
请确认您的搜索栏代理是否已连接? - Balu

0
使用此代码在键盘搜索按钮点击时隐藏键盘。
- (void)searchBarTextDidBeginEditing:(UISearchBar *) bar
{
    UITextField *searchBarTextField = nil;
    NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f) ? bar.subviews : [[bar.subviews objectAtIndex:0] subviews];
for (UIView *subview in views)
{
    if ([subview isKindOfClass:[UITextField class]])
    {
        searchBarTextField = (UITextField *)subview;
        break;
    }
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}

0

对于Swift 1.2,您可以点击屏幕外部或搜索按钮,无论哪种情况都会隐藏键盘

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    self.view.endEditing(true)
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
    }

0

您可以使用以下委托,该委托在搜索栏的搜索按钮被点击时调用。

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar
{    

    [theSearchBar resignFirstResponder];

 }

或者使用这个:

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar
    {    

        [self keyBoradRemove];

     }

- (void) keyBoradRemove 
{
    searchBar.text = @"";
    [searchBar resignFirstResponder];

}

这里的searchBar是UISearchBar的一个实例。

UISearchBar *searchBar;

希望这能帮到你。


Nishant兄弟,这个也无法工作。请帮忙。 - Dhiraj Umale
@dhiraj,应该没问题。我猜你在代码上做错了什么。请再检查一下你的代码。 - Nishant Tyagi
1
不,尼山特,它几个小时之前还能运行,但现在不行了,即使我已经恢复了所有更改。 - Dhiraj Umale
重置模拟器并在重置后退出,然后检查。 - Nishant Tyagi
抱歉,Nishant,什么也没发生。 - Dhiraj Umale
当您点击搜索按钮时,是否调用searchBarSearchButtonClicked委托? - Nishant Tyagi

0
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];

}

0

首先设置 searchbar.delegate = self,然后在 - (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar 中调用 [searchbar resignFirstRespnder]

祝好运


我仍然使用同样的代码行,但它对我不起作用。 - Dhiraj Umale
我正在使用以下代码 - (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar { [theSearchBar resignFirstResponder]; } - Dhiraj Umale
没错,但别忘了在viewDidLoad中设置UISearchBar的代理。 - Mustafa Ibrahim
是的,我已经设置了委托,并且它正在调用委托方法。 - Dhiraj Umale
将以下代码放入调试区并检查它是否不为nil:po theSearchBar - Mustafa Ibrahim
显示剩余5条评论

0
 - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
  {
      [searchBar resignFirstResponder];

   }

但在此之前,请检查您是否已正确设置搜索栏代理。


0

使用搜索栏委托作为

     -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar1
     {
       [searchBar1 resignFirstResponder];
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接