6

当搜索栏最初隐藏时,搜索栏中的取消按钮在 iOS 7 中不起作用。

我按照本教程在 tableview 中创建搜索栏:

雷文德利希教程

本教程中有一个示例项目,最好使用这个项目而不是我的解释:)

在 iOS 5 和 6 中工作正常。我审查了所有代表。

有两种可能性。第一个是隐藏栏时按下按钮,第二个是显示栏时按下按钮(用手势向下移动表格可以看到搜索栏)

如果搜索栏最初是隐藏的,取消按钮不起作用,它不会调用 calcel 委托方法:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

抱歉,我无法更好地解释它。

谢谢

4

5 回答 5

3

我用谷歌搜索了整个互联网,找不到解决方案。所以我改变了 UItableview 的行为。

而不是 [searchBar becomeFirstResponder];我向下滚动表格视图。

- (IBAction)goToSearch:(id)sender {

 scroll down to show the table.
//    CGRect newBounds = self.tableView.bounds;
//    newBounds.origin.y =0;
//    
//    self.tableView.bounds = newBounds;
//[searchBar becomeFirstResponder];

    CGPoint contentOffset=self.tableView.contentOffset;
    contentOffset.y=0;
    [self.tableView setContentOffset:contentOffset animated:YES];


}

在我的 ViewDidload 中:

//        CGRect newBounds = self.tableView.bounds;
//        newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height;
        // self.tableView.bounds = newBounds;

        CGPoint contentOffset=self.tableView.contentOffset;
        contentOffset.y=self.tableView.bounds.origin.y + searchBar.bounds.size.height;
        self.tableView.contentOffset=contentOffset;

如果由于某些原因发现,在 iOS 7 中,更改表格视图边界会导致搜索栏消失。希望有帮助。

于 2013-11-07T16:54:53.417 回答
1

该代码在 iOS7 上对我有用:

- (IBAction)goToSearch:(id)sender {
  [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
  [candySearchBar becomeFirstResponder];
}
于 2014-03-09T20:33:38.107 回答
0

我假设您已在课堂上设置_searchBar.delegate = self并实施UISearchBarDelegate

这就是你的做法:

- (void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
    [searchBar setShowsCancelButton:YES animated:YES];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{                     // called when cancel button pressed
    searchBar.text = nil;

    //hide cancel button
    [_searchBar setShowsCancelButton:NO animated:YES];

    [searchBar resignFirstResponder];
}
于 2014-09-07T05:26:11.780 回答
0

将此代码放入您的项目中,我已经测试过它可以正常工作并且可以正常工作

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

for (UIView *possibleButton in searchbar.subviews)
{
    if ([possibleButton isKindOfClass:[UIButton class]])
    {
        UIButton *cancelButton = (UIButton*)possibleButton;
        cancelButton.enabled = YES;
        break;
    }
}

}
于 2013-10-08T11:14:01.947 回答
0

这个问题似乎来自导航栏中半透明属性的新行为。

由于 iOS 7 导航栏默认是半透明的。当您按下按钮后显示它时,它看起来与搜索栏重叠。

尝试在您的控制器中设置:

float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (osVersion >= 7.0)
{
    self.navigationController.navigationBar.translucent = NO;
}

这应该可以快速解决问题。

但我认为为了获得更好的解决方案,您应该查看iOS 7 过渡指南,其中解释了如何处理半透明导航栏。

希望有帮助。

于 2013-12-19T13:03:20.033 回答