10

我有一个searchDisplayController搜索一个UITableView.

输入搜索词后,我可以看到另一个UITableView包含搜索结果的词。但是,我希望这UITableView是 GROUPED,而不是 PLAIN(默认情况下)。

我该怎么做呢?

4

6 回答 6

15

这对我有用(iOS 5.0):

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"_searchResultsTableViewStyle"];
于 2012-03-20T23:27:48.257 回答
14

如果 - 像我一样 - 你认为普通的 TableView 太丑了,你也可以放弃使用 SearchDisplayController。

我只是:

  • 像我们通常对 IBOutlet 所做的那样,在一个空视图中插入一个searchBar和一个TableView
  • 选择文件的所有者作为他们两个的代表
  • 在开始部分的数量是 0 ([myTab count]) 然后我使用了 reloadData,这次 myTab 由结果填充。
  • [self.resultTableView reloadData];

在这里你可以找到我从代表那里使用的所有方法

@interface MyViewController : UIViewController <UIApplicationDelegate, UISearchBarDelegate> {

    IBOutlet UISearchBar *searchBar;
    IBOutlet UITableView *resultTableView;
}

@property (nonatomic, retain) IBOutlet UISearchBar *searchBar;
@property (nonatomic, retain) IBOutlet UITableView *resultTableView;

  //For your searchBar the 2 most important methods are
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBarClicked;
- (BOOL)searchBarTextDidEndEditing;


  //For your TableView the most important methods are in my case:

    //number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
    //HEADERS
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
    //different numbers of row by section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    //the cells themselves
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@end

毕竟,最简单的解决方案往往是最好的......

于 2011-05-20T03:28:20.770 回答
3

这对我有用:

创建一个扩展 UISearchDisplayController 的类:

@interface RVSearchDisplayController : UISearchDisplayController
@end

@implementation RVSearchDisplayController

-(UITableView *) searchResultsTableView {
    [self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
            forKey:@"_searchResultsTableViewStyle"];
    return [super searchResultsTableView];
}

@end

然后UISearchDisplayController使用 IB 将一个添加到您的表中,并将其自定义类更改为RVSearchDisplayController在 Identity Inspector 中。

于 2011-08-19T14:43:41.317 回答
1

您可以尝试创建 UISearchDisplayController 的子类并使 searchResultsTableView 可搜索

在任何 .h 文件中添加:

@interface YourUISearchDisplayController : UISearchDisplayController {
   UITableView * searchResultsTableView;
}

@property (nonatomic) UITableView * searchResultsTableView;

@end;

然后只需使用 YourUISearchDisplayController 代替 od UISearchDisplayController。

注意:您可能必须使用 (nonatomic, retain)、(nonatomic, assign) 或 (nonatomic, copy)。我不太确定

于 2010-09-26T05:39:02.360 回答
0

这是不可能的,因为searchResultsTableView属性是readonly

于 2010-09-26T05:24:52.660 回答
0

重写-searchResultsTableView将不起作用,因为UISearchDisplayController直接访问其表视图实例变量,而不调用该方法。

的指定初始化程序UISearchDisplayController似乎是一个私有方法-initWithSearchBar:contentsController:searchResultsTableViewStyle:,它设置_searchResultsTableViewStyle实例变量。此实例变量用于创建搜索结果表视图。公共初始化程序调用此方法,传递UITableViewStylePlain.

直接调用私有指定初始化程序或设置实例变量可能会导致应用程序被 App Store 拒绝,因此您可以尝试覆盖公共初始化程序并调用

[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"searchResultsTableViewStyle"];
于 2011-08-03T14:39:28.937 回答