我有一个显示取消按钮的UISearchDisplayController.我想在用户点击取消按钮时调用方法.有没有办法做到这一点?
我正在构建一个仅限iOS 7的应用程序.我正在尝试将UISearchDisplayController设置到导航栏中.
我设置如下:在故事板中,我在视图控制器的视图中添加了"搜索栏和搜索显示控制器",并将其设置为(0,0)相对于顶部布局指南.我设置约束来固定左,上,右.(我玩限制,我完全删除它们,没关系)最重要的是我有我的表视图.当我将搜索栏添加到故事板中的视图时,它会自动为searchDisplayController和searchBar委托设置插座.在代码我self.searchDisplayController.displaysSearchBarInNavigationBar = YES;有两个问题:
1)没有为搜索栏显示任何按钮(界面构建器 - >选择搜索栏 - >选项:未选中),搜索栏位于屏幕中间:

如果我点击导航栏,它会开始编辑搜索栏:

另请注意,暗覆盖图似乎偏离导航栏.在我看来,空间与导航栏的高度相同.就像它已经被那么多下降了.此外,当它显示搜索结果时,内容视图的顶部向下移动相同的量(更多图片跟随),这带来了第二个问题.
2)我搞砸了一会儿,决定检查选项,让它显示取消按钮.现在我已正确嵌入导航栏中的搜索栏,但叠加层仍然向下移动:

同样,当搜索结果表视图出现时,它会向下移动相同的数量(请注意右侧的滚动条):

更奇怪的是,我在搜索显示控制器的tableview图层上设置了一个边框,看起来是正确的:

我之前从未使用过UISearchDisplayController而且我不熟悉如何设置它,但功能上它工作正常.我已经阅读了一些其他类似的帖子,但唯一的建议是通过调整帧和设置手动偏移来破解它.我更想知道造成这种情况的原因,这是一个错误吗?我做错了什么?如果这是一个错误,我可以等待修复.这似乎是一个基本的东西,千人一定没有任何问题,所以我觉得我不是以某种方式正确设置它.谢谢你的输入.
interface-builder uitableview uisearchdisplaycontroller ios7
我有UISearchDisplayController一个设置UITableViewController其嵌套在一个UINavigationController.当选择单元格时,UITableView's didSelectRowAtIndexPath触发方法,将新视图推送到父导航控制器.此新视图应在导入栏中隐藏导航栏.
[[self navigationController] setNavigationBarHidden:YES animated:NO];
Run Code Online (Sandbox Code Playgroud)
我在didSelectRowAtIndexPath方法中使用此行来隐藏导航栏.如果选择的行不使用搜索控制器,但在选择搜索结果时被覆盖,则此方法可以正常工作.似乎在UISearchDisplayController选择行之后的某个时候取消隐藏navigationBar是正确的.
如果我将setNavigationBarHidden调用移动到目标视图的viewWillAppear方法中,结果是类似的.我可以通过将隐藏调用置于其中来使其工作viewDidAppear,但这会产生一种非常尴尬的过渡效果,这种效果会让人觉得有些不合时宜.我想在新视图滑到屏幕之前使navigationBar已经隐藏.
有谁知道导航栏的取消隐藏在哪里,和/或我可以覆盖此行为的任何方式?
我有一个使用StoryBoards的项目,并UISearchDisplayController在a的上下文中使用UINavigationController,它出现在根视图控制器中.当我将一个新的视图控制器推入堆栈并导致模拟内存警告(或实际上得到一个低内存警告).上一个视图控制器成功卸载其视图.但是,当我从堆栈中弹出第二个视图控制器时,我得到了一个EXC_BAD_ACCESS.我打开了NSZombies并发现了这个:
[UISearchDisplayController retain]:发送到解除分配的实例0xb13aa30的消息
我不是(至少在我的代码中)将该消息发送给UISearchDisplayController.用编程方式说,我没有做任何事情.断点显示我甚至没有进入viewDidLoad第一个视图控制器.
但是好奇的是:对于笑声和咯咯笑声,我决定彻底retain改变我的SDC viewDidLoad,只是为了看看会发生什么,不会发生崩溃.但是,我的UISearchDisplayController实例是nil.
我做了一个回溯并得到了这个输出:
#0 0x01e30e1e in ___forwarding___ ()
#1 0x01e30ce2 in __forwarding_prep_0___ ()
#2 0x01dd1490 in CFRetain ()
#3 0x01eb69c0 in +[__NSArrayI __new::] ()
#4 0x01e0a00a in -[__NSPlaceholderArray initWithObjects:count:] ()
#5 0x01e34f52 in +[NSArray arrayWithObjects:count:] ()
#6 0x01e5e084 in -[NSDictionary allValues] ()
#7 0x01035272 in -[UINib instantiateWithOwner:options:] ()
#8 0x00edce2c in -[UIViewController _loadViewFromNibNamed:bundle:] ()
#9 0x00edd3a9 in -[UIViewController loadView] …Run Code Online (Sandbox Code Playgroud) 如果您使用带有UITableViewController的UISearchDisplayController,当用户点击搜索栏时,它会动画以更换导航栏.
我想在UICollectionViewController顶部使用UISearchBar时获得相同的效果.有任何想法吗?
uitableview uisearchbar uisearchdisplaycontroller ios uicollectionview
我遇到了这个奇怪的现象,我无法弄明白.我有一个管理UITableView的UITableViewController.很简单.我还有一个UISearchDisplayController用于搜索表视图的内容.搜索功能将能够删除表视图显示的内容项.因此,如果用户选择删除,他们发现,当搜寻的项目之一,我想不仅重新加载UISearchDisplayController的表视图也是的UITableViewController的表视图.当我这样做时,常规表视图的部分弹出并显示在UISearchDisplayController上方.这真的很奇怪.我认为解释它的最好方法是使用图像:

如果你们中任何人知道可能导致这个问题的原因或者知道解决方法,那就太棒了.
我一直在使用Core Data创建一个iPhone App.
首先,使用NSFetchedResultsController和UISearchDisplayController一起获取结果是否有意义?你会推荐别的吗?
我一直在尝试很长时间组合NSFetchedResultController和UISearchDisplayController.我一直在考虑在(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption方法中将NSPredicate设置为UIViewController 的NSFetchedResultController .但这并不是那么好用.
那么,您知道如何为我的问题实施解决方案吗?非常感谢您发布答案或指向优秀教程的链接.
编辑
这是我的代码.UISearchDisplayDelegate方法调用(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope应在NSFetchedResultController中设置谓词的方法.我还添加了NSFetchedResultController的代码.
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSString *query …Run Code Online (Sandbox Code Playgroud) iphone core-data uisearchdisplaycontroller nsfetchedresultscontroller
我有一个UISearchBar和UISearchDisplayController,一切都很好但我的范围选择器显示在文本字段旁边而不是在它下面.我知道这是设备在横向时的预期操作,但由于我在UISplitViewController的主视图中有UISearchBar,它最终看起来像这样:

是否有任何方法可以强制范围栏显示在所有界面方向的文本字段下方(我知道这在iPad上的Mail.app中很好用,所以它可能,但谁知道Apple是否决定隐藏选项要做所以)
iphone cocoa-touch scope uisearchbar uisearchdisplaycontroller
我有一个带有嵌入式UISearchDisplayController的UITableViewController.在iOS 7中,搜索框位于状态栏下方.接口构建器中是否有一种方法可以偏移tableview,以便状态栏不会覆盖搜索栏(并且仍然使用UITableViewController和UISearchDisplayController设置)?

我正在使用UISearchBar作为UITableView的标头.UISearchBar样式是UISearchBarStyleMinimal.当搜索处于活动状态时,状态栏会变为黑色.如何解决?
在搜索激活之前

搜索已激活

iphone ×6
ios ×5
uitableview ×4
ios7 ×3
uisearchbar ×3
behind ×1
cocoa-touch ×1
core-data ×1
reload ×1
scope ×1
uistoryboard ×1