我正在尝试在基于CoreData的iPhone应用程序中实现搜索代码.我不知道该怎么办.该应用程序已经有一个带有谓词的NSFetchedResultsController,用于检索主TableView的数据.在改变太多代码之前,我想确保自己走在正确的道路上.我很困惑,因为很多例子都是基于数组而不是CoreData.
以下是一些问题:
我是否需要第二个NSFetchedResultsController只检索匹配的项目,或者我可以使用与主TableView相同的项目吗?
如果我使用相同的,它是否像清除FRC缓存然后更改handleSearchForTerm:searchString方法中的谓词一样简单?谓词是否必须包含初始谓词以及搜索词,还是记得它首先使用谓词来检索数据?
我如何回到原始结果?我只是将搜索谓词设置为nil吗?难道不会杀掉用于首先检索FRC结果的原始谓词吗?
如果有人使用FRC搜索任何代码示例,我将不胜感激!
iphone search core-data uisearchbar 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) 如何在iOS7中更改UISearchBar的背景颜色?

不是灰色,我想像我的uinavigationbar一样改变颜色
如果我使用此代码,那就是出来的
searchBar.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)

那不是红色!!! 这与导航栏的背景颜色完全相同.
objective-c background-color uisearchbar uisearchdisplaycontroller ios7
我正在为iOS 7更新我的应用程序,并且我正在调整所有视图以考虑新的透明状态栏(我的应用程序仍将使用不透明的导航栏).
在每个视图中调整状态栏相对容易,除了我在一个视图控制器中连接到UISearchDisplayController的UISearchBar时遇到的一个主要问题.
搜索栏似乎正常显示,如下所示:
搜索栏http://imageshack.us/a/img163/9128/06vx.png
问题是,一旦我开始搜索,导航栏就会消失(应该如此),但其他一切也会向上移动以重叠状态栏:
破碎的搜索栏http://imageshack.us/a/img11/8237/corh.png
这似乎没有按预期工作,因为屏幕变暗发生在搜索栏下方20个像素处,搜索栏应该在此处结束.
在iOS 7中是否有针对此的内置解决方案?每次用户开始和结束搜索时,我不必为每个视图手动调整帧.
谢谢!
每当用户开始编辑UISearchDisplayController搜索栏时,搜索控制器就会变为活动状态,并在显示搜索表视图时隐藏视图的导航栏.是否可以防止UISearchDisplayController隐藏导航栏而不重新实现它?
iphone uinavigationcontroller iphone-sdk-3.0 uisearchdisplaycontroller
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) 我有一个UITableViewController与UISearchBar和UISearchDisplayController.它存在于UIVavigationController中的UIViewController中的Container视图中.我制作了这张图片来帮助描述结构:

这就是它的真实情况:

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

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

如果不涉及容器视图,则这一切都按预期工作,并且表内容在状态栏下方传递,但是涉及ContainerView时,表文本和状态栏会发生冲突.
如何使状态栏下的文本正常运行?
uitableview uisearchbar uisearchdisplaycontroller ios uicontainerview
我想在用户点击"搜索"按钮时关闭我的UISearchDisplayController,因为我正在从网上加载新数据.如何以编程方式关闭控制器?我已经调用了正确的方法,但不知道该怎么做.
我认为下面会有用,但我错了.
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[self.searchDisplayController finalize];
}
Run Code Online (Sandbox Code Playgroud) 在有关属性1的UIViewController 文档中,它说: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
我有一个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
uisearchbar ×6
ios ×5
iphone ×3
ios7 ×2
objective-c ×2
uitableview ×2
cocoa-touch ×1
core-data ×1
ios4 ×1
ios6 ×1
ios8 ×1
search ×1
statusbar ×1