7

我有一个 xCode 项目,其中包含一个带有“搜索栏和搜索显示控制器”的表格视图,以允许用户细化显示项目的列表。一般来说,遵循http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view中提供的指导。我最近下载了支持 iOS 7 的最新 xCode(版本 5.0 (5A1413)),并一直在不同目标上测试有问题的应用程序。

在 iOS 6 目标(模拟器或真实设备)上运行此应用程序时,它按预期工作,这意味着按下取消按钮会删除搜索栏,按下清除按钮(小灰色 x)会清除所有已输入的搜索条件用户。但是当项目在 iOS 7 目标上运行时,清除和取消按钮都不起作用。

本项目实现了searchBarCancelButtonClicked方法,我验证了目标运行iOS 7时没有调用该方法。

- (void)searchBarCancelButtonClicked:(UISearchBar *)SearchBar
{
    NSLog(@"searchBarCancelButtonClicked called");

    self.searchBar.text = nil;

    …

    // Hide Search bar when cancelled
    [self hideSeachBar];

    [self.searchBar resignFirstResponder];

    …
    }

我的表视图控制器设置为 UISearchDisplayDelegate 和 UISearchBarDelegate。看起来这仍然有效,因为 searchBar:textDidChange: 在 iOS 6 或 7 目标上被调用。

@interface ItemViewController () <UISearchDisplayDelegate, UISearchBarDelegate>
…
@end

我看不到与此相关的任何其他帖子或任何 iOS 7 更改材料(例如https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid /TP40013174-CH8-SW1),其中提到了支持 iOS7 需要进行的任何重新编码。

对此有什么想法吗?谢谢

4

6 回答 6

3

我有同样的问题,我尝试使用以下代码。请试试这个。

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
    controller.active = YES;

    [self.view addSubview:controller.searchBar];
    [self.view bringSubviewToFront:controller.searchBar];
}

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView  {

    tableView.frame = self.archiveListTblView.frame;
}

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    controller.active=NO;

    [self.view addSubview:controller.searchBar];
}
于 2013-10-04T13:59:51.153 回答
1

如果您在导航上触摸按钮“搜索”,则“取消”按钮和“清除”按钮将不起作用。如果您点击搜索栏进行星标搜索,它可以正常工作 => 这意味着如果在开始搜索之前搜索栏在屏幕上不可见,那么这些按钮似乎也被禁用了。

所以,我找到了一个解决方案,但它并不完全完美。在使搜索栏成为第一个响应之前,您必须将表格视图滚动到顶部。试试这个代码。

-(IBAction)goToSearch:(id)sender {
     // Make search bar visible on screen before make it response
    [_tableView setContentOffset:CGPointMake(0, 0) animated:NO];

    // Make search bar active
    [candySearchBar becomeFirstResponder];
}

如果您这样做,唯一的问题是您的表格视图将滚动到顶部,这意味着当您取消搜索时,您之前丢失了当前单元格索引。

于 2013-12-06T07:05:12.677 回答
1

我也遇到过这个问题。UISearchBarDelegate奇怪的是,正在调用其他委托方法。一种解决方法可能是:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    if ([searchText length] == 0) {
        NSLog("No Text");
    }
}

它对我有用

于 2014-06-06T23:57:26.030 回答
1

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

由于 iOS 7 导航栏默认是半透明的。当您按下按钮后显示它时,它看起来与搜索栏重叠。如果您滚动到 listView 的顶部并使用搜索栏,它应该可以正常工作。

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

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

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

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

希望有帮助。

于 2013-12-18T16:04:32.717 回答
0

我用谷歌搜索了整个互联网,找不到解决方案。所以我改变了 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:06.523 回答
0

就我而言,我已将搜索栏重新定位到屏幕顶部,并且有一个不可见的视图与搜索栏重叠。

因此实际上没有触摸取消按钮。

因此,当调用 [searchBarTextDidBeginEditing] 方法时,我将搜索栏放在前面,如下所示。

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
    lc_SearchBarYPos.constant = 20.0f; //this is code to reposition the searchbar
    [self.view bringSubviewToFront:searchBar];
}

希望这可能会有所帮助。

于 2014-12-01T06:48:48.013 回答