标签: uisearchdisplaycontroller

如何使用UISearchDisplayController/UISearchBar过滤NSFetchedResultsController(CoreData)

我正在尝试在基于CoreData的iPhone应用程序中实现搜索代码.我不知道该怎么办.该应用程序已经有一个带有谓词的NSFetchedResultsController,用于检索主TableView的数据.在改变太多代码之前,我想确保自己走在正确的道路上.我很困惑,因为很多例子都是基于数组而不是CoreData.

以下是一些问题:

  1. 我是否需要第二个NSFetchedResultsController只检索匹配的项目,或者我可以使用与主TableView相同的项目吗?

  2. 如果我使用相同的,它是否像清除FRC缓存然后更改handleSearchForTerm:searchString方法中的谓词一样简单?谓词是否必须包含初始谓词以及搜索词,还是记得它首先使用谓词来检索数据?

  3. 我如何回到原始结果?我只是将搜索谓词设置为nil吗?难道不会杀掉用于首先检索FRC结果的原始谓词吗?

如果有人使用FRC搜索任何代码示例,我将不胜感激!

iphone search core-data uisearchbar uisearchdisplaycontroller

145
推荐指数
6
解决办法
5万
查看次数

在UITableViewController中使用UISearchDisplayController时断言失败

我一直在尝试将简单的搜索功能添加到我的应用程序中的TableViewController.我按照Ray Wenderlich的教程.我有一个带有一些数据的tableView,我在storyboard中添加了搜索栏+显示控制器,然后我有了这段代码:

#pragma mark - Table View
     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BreedCell" forIndexPath:indexPath];

        //Create PetBreed Object and return corresponding breed from corresponding array
        PetBreed *petBreed = nil;

        if(tableView == self.searchDisplayController.searchResultsTableView)
            petBreed = [_filteredBreedsArray objectAtIndex:indexPath.row];
        else
            petBreed = [_breedsArray objectAtIndex:indexPath.row];

        cell.accessoryType  = UITableViewCellAccessoryDisclosureIndicator;
        cell.textLabel.text = petBreed.name;

        return cell;
    }

#pragma mark - Search
    -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
        [_filteredBreedsArray removeAllObjects];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@",searchString];
        _filteredBreedsArray = [[_breedsArray filteredArrayUsingPredicate:predicate] mutableCopy];

        return YES;
    } …
Run Code Online (Sandbox Code Playgroud)

uitableview uisearchdisplaycontroller ios ios6

80
推荐指数
3
解决办法
2万
查看次数

如何在iOS7中更改UISearchBar的背景颜色

如何在iOS7中更改UISearchBar的背景颜色?

在此输入图像描述

不是灰色,我想像我的uinavigationbar一样改变颜色

如果我使用此代码,那就是出来的

searchBar.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那不是红色!!! 这与导航栏的背景颜色完全相同.

objective-c background-color uisearchbar uisearchdisplaycontroller ios7

71
推荐指数
4
解决办法
5万
查看次数

iOS 7 UISearchDisplayController搜索栏在搜索时重叠状态栏

我正在为iOS 7更新我的应用程序,并且我正在调整所有视图以考虑新的透明状态栏(我的应用程序仍将使用不透明的导航栏).

在每个视图中调整状态栏相对容易,除了我在一个视图控制器中连接到UISearchDisplayController的UISearchBar时遇到的一个主要问题.

搜索栏似乎正常显示,如下所示:

搜索栏http://imageshack.us/a/img163/9128/06vx.png

问题是,一旦我开始搜索,导航栏就会消失(应该如此),但其他一切也会向上移动以重叠状态栏:

破碎的搜索栏http://imageshack.us/a/img11/8237/corh.png

这似乎没有按预期工作,因为屏幕变暗发生在搜索栏下方20个像素处,搜索栏应该在此处结束.

在iOS 7中是否有针对此的内置解决方案?每次用户开始和结束搜索时,我不必为每个视图手动调整帧.

谢谢!

statusbar uisearchbar uisearchdisplaycontroller ios ios7

66
推荐指数
7
解决办法
5万
查看次数

防止UISearchDisplayController隐藏导航栏

每当用户开始编辑UISearchDisplayController搜索栏时,搜索控制器就会变为活动状态,并在显示搜索表视图时隐藏视图的导航栏.是否可以防止UISearchDisplayController隐藏导航栏而不重新实现它?

iphone uinavigationcontroller iphone-sdk-3.0 uisearchdisplaycontroller

65
推荐指数
6
解决办法
5万
查看次数

在iOS 8中的导航栏中显示搜索栏

UISearchDisplayController有一个boolean叫做的财产displaysSearchBarInNavigationBar.在iOS 8中,我的搜索栏向上移动了什么?非常感谢任何指导.

这是我的代码,我不完全确定为什么这不起作用.当我单击搜索栏时,它会消失,而不是移动自身和导航栏.

import UIKit

class ViewController: UIViewController, UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {

let searchController = UISearchController(searchResultsController:  nil)

var tableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.searchController.searchResultsUpdater = self
    self.searchController.delegate = self
    self.searchController.searchBar.delegate = self

    self.searchController.hidesNavigationBarDuringPresentation = true
    self.searchController.dimsBackgroundDuringPresentation = true

    tableView.dataSource = self
    tableView.delegate = self


    self.navigationItem.titleView = searchController.searchBar


    self.definesPresentationContext = true

    self.setupSearchBar()




}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning() …
Run Code Online (Sandbox Code Playgroud)

uisearchbar uisearchdisplaycontroller ios8

34
推荐指数
1
解决办法
4万
查看次数

当UISearchBar处于活动状态时,UITableView内容与状态栏重叠

我有一个UITableViewController与UISearchBar和UISearchDisplayController.它存在于UIVavigationController中的UIViewController中的Container视图中.我制作了这张图片来帮助描述结构:

在此输入图像描述

这就是它的真实情况:

在此输入图像描述

当我点击搜索栏时,我必须隐藏导航栏.通常情况下,这会自行发生,但由于我的UITableViewController在Container View中,我必须自己处理这个更改.这就是它的样子,注意状态栏是白色的,因为导航栏是白色的,即使它现在是隐藏的.

在此输入图像描述

一旦我开始输入一些搜索文本,结果就会显示出来.如果我向上滚动这些结果,它们会在搜索栏下方传递,但它们与状态栏重叠,这非常没有吸引力.

在此输入图像描述

如果不涉及容器视图,则这一切都按预期工作,并且表内容在状态栏下方传递,但是涉及ContainerView时,表文本和状态栏会发生冲突.

如何使状态栏下的文本正常运行?

uitableview uisearchbar uisearchdisplaycontroller ios uicontainerview

31
推荐指数
3
解决办法
1万
查看次数

如何以编程方式关闭UISearchDisplayController?

我想在用户点击"搜索"按钮时关闭我的UISearchDisplayController,因为我正在从网上加载新数据.如何以编程方式关闭控制器?我已经调用了正确的方法,但不知道该怎么做.

我认为下面会有用,但我错了.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [self.searchDisplayController finalize];
}
Run Code Online (Sandbox Code Playgroud)

iphone uisearchdisplaycontroller ios4

30
推荐指数
1
解决办法
7312
查看次数

UIViewController不保留其以编程方式创建的UISearchDisplayController

在有关属性1UIViewController 文档中,它说:searchDisplayController

如果以编程方式创建搜索显示控制器,则在初始化时,搜索显示控制器会自动设置此属性.

当我这样创建我的UISearchDisplayController时:

[[[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self] autorelease];
Run Code Online (Sandbox Code Playgroud)

-[UIViewController searchDisplayController]不是nil.但是,它在事件循环结束后被填写,这会导致搜索显示控制器在我触摸搜索栏时不显示.什么都没有崩溃.这很奇怪.如果我省略了呼叫autorelease,一切正常:

[[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
Run Code Online (Sandbox Code Playgroud)

然而,泄漏UISearchDisplayController(我用仪器验证了这一点).由于该searchDisplayController 属性被标记为(nonatomic, retain, readonly)我希望UISearchDisplayController它在设置后保留它.

此stackoverflow文章是相关的.

uiviewcontroller uisearchdisplaycontroller ios automatic-ref-counting

30
推荐指数
1
解决办法
6303
查看次数

隐藏UISearchBar取消按钮

我有一个UISearchDisplayController和UISearchBar从我的笔尖通过Outlets连接到我的ViewController.

我想隐藏取消按钮,以便用户永远不会看到它.问题是以下代码隐藏了按钮,但仅在将其显示给用户一毫秒后(例如,它在模拟器和设备上闪烁然后消失在视图之外).

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller 
{
    controller.searchBar.showsCancelButton = NO;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来隐藏它?

cocoa-touch objective-c uisearchbar uisearchdisplaycontroller ios

28
推荐指数
4
解决办法
2万
查看次数