标签: uisearchdisplaycontroller

如何控制UISearchDisplayController自己的表视图?

在我的应用程序中,当我没有过滤我的桌子时,当我点击一个单元格时,它的框架高度会增加,以显示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

6
推荐指数
1
解决办法
6429
查看次数

如何控制UISearchDisplayController的searchResultsTableView?

我想知道如何控制使用的表视图UISearchDisplayController.您不能覆盖该searchResultsTableView属性UISearchDisplayController,因为它是只读属性.

我试图searchResultsTableView通过自定义覆盖UITableView.这只能运行一次,但是一旦你尝试第二次搜索,真实searchResultsTableView就会再次出现.(我的意思是,你在一些文本输入searchBar,您的自定义表视图顶部并显示搜索结果,事后你按下取消按钮.现在,如果你重复这一点,您的自定义表将不会被显示,searchResultTableView中UISearchDisplayController将位于顶部).

当然,你可以试试它没有UISearchDisplayController,但我依靠这个类的优点,我只想自定义tableView.

iphone customization uitableview uisearchdisplaycontroller

6
推荐指数
2
解决办法
6921
查看次数

当UISearchDisplayController处于非活动状态时,保持搜索项可见

我的应用使用了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)

更好的建议仍然欢迎!

iphone cocoa-touch uisearchbar uisearchdisplaycontroller

6
推荐指数
1
解决办法
3682
查看次数

UISearchBar,我怎样才能保持调光视图(阴影背景)始终显示

当我使用UISearchBar =>按栏=>显示带调光视图的搜索模式,但输入一些搜索文本时,调光视图消失.我怎么能保持调光视图总是显示

感谢你!

uisearchbar uisearchdisplaycontroller

6
推荐指数
0
解决办法
488
查看次数

如果iphone语言不是英语,searchDisplayController不会显示结果

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)

iphone objective-c arabic uisearchdisplaycontroller ios

6
推荐指数
1
解决办法
637
查看次数

UISearchDisplayController - 为什么我的搜索结果视图包含空单元格?

我即将离开这里,在我的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)

iphone uisearchdisplaycontroller nsfetchedresultscontroller

6
推荐指数
1
解决办法
1688
查看次数

如何在激活搜索栏时显示searchResultsTableView?

我正在实现一个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 ios

6
推荐指数
1
解决办法
2925
查看次数

搜索字符串为空时显示UISearchDisplayTableView

这非常令人沮丧:即使搜索字符串为空,我也试图在UISearchDisplayController中显示未过滤的结果.

添加调试代码numberOfSectionsInTableView:numberOfRowsInSection:显示当我的搜索字符串为空时,返回非零整数,但从cellForRowAtIndexPath:不调用!tableview似乎是隐藏的.

我试着设置tableview.hidden=NO;searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView无济于事.

这不是那么难以实现,我想这是一件很常见的事情!

uitableview uisearchdisplaycontroller ios

6
推荐指数
1
解决办法
1692
查看次数

UISearchDisplayController配置"无结果"视图不与tableFooterView重叠

我有一个由系统提供的东西列表(例如品牌),这些东西不是用户可编辑的,但必须不时更改.

上下文

这些内容显示在表视图中,可使用默认的UISearchDisplayController进行搜索.但是,由于事情列表肯定不完整,我想让用户能够请求在列表中添加其他内容.为此,我在原始表视图和搜索结果表视图中添加了一个表页脚视图,该视图提供了一个发送邮件的按钮.

问题

只要搜索结果表视图仍包含条目,它就可以正常工作.我的表格页脚视图显示在搜索结果下方,一切正常.

但是,如果未找到搜索词的结果,搜索显示控制器将在表视图中心显示"无结果"标签.这通常看起来很棒,像这样:

默认

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

在此输入图像描述

我认为在我的情况下我不需要"没有结果"的标签,因为我的页脚视图使得合理清楚地表明没有结果以及如何处理它.我也不介意,只要它不重叠.

我怎么能

  • 使搜索视图不显示"无结果"标签
  • 或配置它的显示方式( - >不重叠)

如果这是不可能的,我也愿意接受其他方式显示页脚视图(而不是页脚)的建议,这不会有这个问题.但我喜欢这个解决方案,因为我可以在两种情况下使用它(普通表视图和搜索结果表视图),而不必更改任何内容.

uitableview uisearchdisplaycontroller ios

6
推荐指数
1
解决办法
4644
查看次数

如何从iOS 8.0中不推荐使用的UISearchDisplayController更改为UISearchController

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

6
推荐指数
1
解决办法
2767
查看次数