在我的应用程序中,当我没有过滤我的桌子时,当我点击一个单元格时,它的框架高度会增加,以显示UIProgressView显示下载进度的内容.
但是,当我使用a过滤获取的结果控制器数据时UISearchDisplayController,此过滤表视图中的单元格的行为方式不同.
相反,单元格不会调整大小,不显示进度视图,不会触发下载,应用程序随后崩溃.
如何控制过滤结果时显示的表格视图UISearchDisplayController?
编辑
这是我的-tableView:didSelectRowAtIndexPath:方法.它有点长,但要点是它在我不搜索时工作正常.
我想我需要以某种方式调整它,以便它可以使用搜索结果控制器在此处抛出的任何表视图/获取结果控制器.
- (void) tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tv deselectRowAtIndexPath:indexPath animated:YES];
if ([self.searchBar isFirstResponder])
[self.searchBar resignFirstResponder];
MyObject *_myObject = (MyObject *)[self.fetchedResultsController objectAtIndexPath:indexPath];
if (self.isSimulatingFileHierarchy)
{
if ([_myObject isFolder])
{
ObjectsViewController *_objectsViewController = [[ObjectsViewController alloc] initWithNibName:@"ObjectsViewController" bundle:nil];
_objectsViewController.managedObjectContext = self.managedObjectContext;
_objectsViewController.nodeID = self.nodeID;
_objectsViewController.nodeName = self.nodeName;
_objectsViewController.parentObjectKey = [_myObject cleanedKey];
if (self.parentObjectKey)
_objectsViewController.title = [[_myObject cleanedKey] stringByTrimmingPrefix:[self.parentObjectKey stringByAppendingString:@"/"]];
else
_objectsViewController.title = [_myObject cleanedKey];
[self.navigationController pushViewController:_objectsViewController animated:YES];
UIBarButtonItem …Run Code Online (Sandbox Code Playgroud) iphone uitableview uisearchdisplaycontroller nsfetchedresultscontroller
我想知道如何控制使用的表视图UISearchDisplayController.您不能覆盖该searchResultsTableView属性UISearchDisplayController,因为它是只读属性.
我试图searchResultsTableView通过自定义覆盖UITableView.这只能运行一次,但是一旦你尝试第二次搜索,真实searchResultsTableView就会再次出现.(我的意思是,你在一些文本输入searchBar,您的自定义表视图顶部并显示搜索结果,事后你按下取消按钮.现在,如果你重复这一点,您的自定义表将不会被显示,searchResultTableView中UISearchDisplayController将位于顶部).
当然,你可以试试它没有UISearchDisplayController,但我依靠这个类的优点,我只想自定义tableView.
我的应用使用了UISearchDisplayController.当用户输入搜索词时,我希望它在搜索栏中保持可见.如果用户选择其中一个匹配结果,则此方法有效,但如果用户单击"搜索"按钮则不行.
这有效:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.searchDisplayController.searchResultsTableView) {
NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row];
[self.searchDisplayController setActive:NO animated:YES];
[self.searchDisplayController.searchBar setText:selectedMatch];
return;
}
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我在-searchBarSearchButtonClicked:文本中做同样的事情不会留在搜索栏中.关于如何在这种情况下实现这一目标的任何想法?
相关的,如果我设置搜索栏的文本(但保持UISearchDisplayController不活动状态),则会触发searchResultsTableView的显示.我只想表明当用户点击搜索栏时.
编辑:找到一种解决方法来设置搜索栏的文本,而不会在任何时候显示searchResultsTableView:
// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text
[self.searchDisplayController setActive:YES animated:YES];
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = @"text to show";
Run Code Online (Sandbox Code Playgroud)
更好的建议仍然欢迎!
当我使用UISearchBar =>按栏=>显示带调光视图的搜索模式,但输入一些搜索文本时,调光视图消失.我怎么能保持调光视图总是显示
感谢你!
searchDisplayController当使用如下方法搜索英语和阿拉伯语单词时,我有一个完美的工作:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSInteger)scope
{
NSString *query = self.searchDisplayController.searchBar.text;
if (query && query.length) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", query];
[searchResultController_.fetchRequest setPredicate:predicate];
}
NSError *error = nil;
if (![[self searchResultController] performFetch:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果iphone语言是英语,这可以正常工作,但是如果我将iPhone语言改为阿拉伯语(全局设置)并尝试用阿拉伯语或英语单词搜索,searchResultsController则不会显示结果,为什么?
ps当我在查询中放置一个静态阿拉伯语单词时:NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ClientName contains[cd] %@", @"?????"];这searchDisplayController将显示阿拉伯语单词
的正确结果?????
编辑:我试图在这样的代码中构建谓词:
NSExpression *clientNameEx=[NSExpression expressionForKeyPath:@"ClientName"];
NSExpression *aClientEx=[NSExpression expressionForConstantValue:query];
NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:clientNameEx
rightExpression:aClientEx
modifier:NSDirectPredicateModifier
type:NSContainsPredicateOperatorType …Run Code Online (Sandbox Code Playgroud) 我即将离开这里,在我的Core Data数据库中我有很多用户,我已经通过NSFetchedResultController将数据库连接到tableviewcontroller,当视图加载时,我看到所有用户,我可以通过storyboard segue执行推送到详细视图控制器...到目前为止,所以上帝,我的tableview包含一个带有图像视图的自定义单元格和2个uitextlabels,它们都分配了标签值.
现在,当我执行搜索时,我创建了一个带有谓词的新NSFetchedResultController,并执行performFetch ..然后我获取fetchedObjects属性并且它包含匹配的用户,因此搜索请求也像魅力一样...我的tableviews数据源我检查self.tableView == self.searchdispl.view以查看我应该从哪个控制器查询数据..在所有控制器委托中,我检查哪个控制器是活动的,所以我知道要重新加载哪个视图.如果我记录了很多数据,那么幕后操作就很好了,委托和数据源方法都使用了正确的视图和fetchcontroller.
在我的cellForRowAtIndexPath中,我可以注销我的user.name,这在搜索时也是正确的.
问题是顶部的UISearchDisplayController视图只有空单元格,除非我将UITableViewControllers动态原型单元格设置为basic,然后两个tableviews都包含带有用户名称的标签!来自单元格的segue仍然不起作用,但是单元格中有数据.
看起来UISearchDisplayControllers视图是一个通用视图,至少在segues和cell布局时...
我检查了从UISearchDisplayController到我的UITableViewController的所有连接,看起来都很好......
为什么SearchDisplayControllers视图不接受我的单元格布局和segue?
谢谢 :)
更新:刚刚弄清楚出了什么问题,但尚未找到解决方案.在我的cellForRowAtIndexPath中,当thr searchdisplayview在此方法中时,单元格始终配置为默认单元格.我是否真的需要在代码中创建我的单元格以使uisearchdisplay工作?为什么不能使用故事板中配置的单元格?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PersonCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSLog(@"Default Cell");
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSFetchedResultsController *controller = tableView == self.tableView ? self.fetchedResultsController : self.fetchedResultsControllerForSearch;
Person *p;
p = [controller objectAtIndexPath:indexPath];
[(UILabel*) [cell viewWithTag:1] setText:p.name];
[(UILabel*) [cell viewWithTag:2] setText:@"Status"];
if(p.avatarImage){
UIImage *avatar = [[UIImage alloc] initWithData:p.avatarImage];
[(UIImageView …Run Code Online (Sandbox Code Playgroud) 我正在实现一个UISearchDisplayController,我想searchResultsTableView在加载文本之前填充tableView(未过滤)的内容 - 在输入文本之前.
这在我开始在searchBar中输入值时有效.
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
self.isSearching = YES;
//tell the searchDisplayTableView to show here!
[controller.searchBar setShowsCancelButton:YES animated:YES];
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
self.isSearching = NO;
[controller.searchBar setShowsCancelButton:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
有人会指出正确的方向吗?
请不要回答"不要那样做"或"Apple没有设计控制方式".要么 ...
这非常令人沮丧:即使搜索字符串为空,我也试图在UISearchDisplayController中显示未过滤的结果.
添加调试代码numberOfSectionsInTableView:并numberOfRowsInSection:显示当我的搜索字符串为空时,返回非零整数,但从cellForRowAtIndexPath:不调用!tableview似乎是隐藏的.
我试着设置tableview.hidden=NO;在searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView无济于事.
这不是那么难以实现,我想这是一件很常见的事情!
我有一个由系统提供的东西列表(例如品牌),这些东西不是用户可编辑的,但必须不时更改.
这些内容显示在表视图中,可使用默认的UISearchDisplayController进行搜索.但是,由于事情列表肯定不完整,我想让用户能够请求在列表中添加其他内容.为此,我在原始表视图和搜索结果表视图中添加了一个表页脚视图,该视图提供了一个发送邮件的按钮.
只要搜索结果表视图仍包含条目,它就可以正常工作.我的表格页脚视图显示在搜索结果下方,一切正常.
但是,如果未找到搜索词的结果,搜索显示控制器将在表视图中心显示"无结果"标签.这通常看起来很棒,像这样:

但是由于我的tableFooterView仍然显示(我想要它!),"无结果"标签与我的页脚视图重叠,看起来很糟糕:

我认为在我的情况下我不需要"没有结果"的标签,因为我的页脚视图使得合理清楚地表明没有结果以及如何处理它.我也不介意,只要它不重叠.
我怎么能
如果这是不可能的,我也愿意接受其他方式显示页脚视图(而不是页脚)的建议,这不会有这个问题.但我喜欢这个解决方案,因为我可以在两种情况下使用它(普通表视图和搜索结果表视图),而不必更改任何内容.
UISearchController自从学习UISearchDisplayController被弃用之后我就习惯了.但是现在有一个问题,在GitHub中与Chenyuan的SPGooglePlacesAutocomplete分叉库集成.
当我开始输入时,我得到了搜索栏,没有显示任何结果.我还想知道如果UISearchDisplayController如何被弃用,那么Chenyuan Demo会在没有警告或发布弃用方法的情况下运行.
这是我的代码片段,我试图将他的演示转换为UISearchController,请告诉我我哪里出错了.
MainViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
@class SPGooglePlacesAutocompleteQuery;
@interface MainViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate,
UISearchBarDelegate,
UISearchControllerDelegate,
UITableViewDataSource,
UITableViewDelegate>{
NSArray *searchResultPlaces;
SPGooglePlacesAutocompleteQuery *searchQuery;
MKPointAnnotation *selectedPlaceAnnotation;
BOOL shouldBeginEditing;
@private
CGRect _searchTableViewRect;
}
// Search
@property (strong, nonatomic) UISearchDisplayController *searchController;
@property (strong, nonatomic) MKLocalSearch *localSearch;
@property (strong, nonatomic) MKLocalSearchResponse *results;
@end
Run Code Online (Sandbox Code Playgroud)
MainViewController.m片段
// setup Search Controller
-(void) setupSearchController {
// The TableViewController used to display the results …Run Code Online (Sandbox Code Playgroud) objective-c uisearchbar uisearchdisplaycontroller ios uisearchcontroller