将 searchDisplayController 表视图样式更改为分组?

发布于 2024-09-24 19:17:29 字数 208 浏览 5 评论 0原文

我有一个搜索 UITableViewsearchDisplayController

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

我该怎么做?

I have a searchDisplayController that searches a UITableView.

After entering the search terms, I can see another UITableView that contains the search results. However, I want this UITableView to be GROUPED, not PLAIN (like it is by default).

How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

一身骄傲 2024-10-01 19:17:29

这对我有用(iOS 5.0):

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"_searchResultsTableViewStyle"];

This worked for me (iOS 5.0):

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"_searchResultsTableViewStyle"];
旧情勿念 2024-10-01 19:17:29

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

我只是:

  • 在一个空视图中插入一个searchBar和一个TableView,就像我们通常为IBOutlet所做的那样,
  • 选择文件所有者作为它们的委托
  • 一开始,部分的数量为 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

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

If - like me - you think the plain TableView was way too ugly, you can also abandon the use of SearchDisplayController.

I just:

  • inserted in an empty View a searchBar and a TableView as we usually do for IBOutlet
  • selected the File's owner as delegate for both of them.
  • At the beginin the number of section is 0 ([myTab count]) then I used reloadData and this time myTab is populated by the result.
  • [self.resultTableView reloadData];

Here you can find all the method I used from the delegates

@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

After all, the simplest solution is often the best...

脸赞 2024-10-01 19:17:29

这对我有用:

创建一个扩展 UISearchDisplayController 的类:

@interface RVSearchDisplayController : UISearchDisplayController
@end

@implementation RVSearchDisplayController

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

@end

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

This works for me:

Create a class which extends UISearchDisplayController:

@interface RVSearchDisplayController : UISearchDisplayController
@end

@implementation RVSearchDisplayController

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

@end

Then add a UISearchDisplayController to your table using IB, and change its Custom Class to RVSearchDisplayController in Identity Inspector.

过去的过去 2024-10-01 19:17:29

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

在任何 .h 文件中可搜索添加:

@interface YourUISearchDisplayController : UISearchDisplayController {
   UITableView * searchResultsTableView;
}

@property (nonatomic) UITableView * searchResultsTableView;

@end;

然后只需使用 YourUISearchDisplayController 而不是 od UISearchDisplayController。

注意:您可能必须使用(非原子,保留),(非原子,分配)或(非原子,复制)。我不太确定

You could try to create a subclass of UISearchDisplayController and make searchResultsTableView searchable

in any .h file add:

@interface YourUISearchDisplayController : UISearchDisplayController {
   UITableView * searchResultsTableView;
}

@property (nonatomic) UITableView * searchResultsTableView;

@end;

Then just use YourUISearchDisplayController instead od UISearchDisplayController.

Note: you might have to use (nonatomic, retain), (nonatomic, assign), or (nonatomic, copy). I'm not really sure

送君千里 2024-10-01 19:17:29

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

This is not possible as the searchResultsTableView property is readonly.

我偏爱纯白色 2024-10-01 19:17:29

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

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

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

[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"searchResultsTableViewStyle"];

Overriding -searchResultsTableView won't work, because UISearchDisplayController accesses its table view instance variable directly, without calling the method.

The designated initializer for UISearchDisplayController appears to be a private method, -initWithSearchBar:contentsController:searchResultsTableViewStyle:, which sets the _searchResultsTableViewStyle instance variable. This instance variable is used in creating the search results table view. The public initializer calls this method, passing UITableViewStylePlain.

Directly calling the private designated initializer or setting the instance variable would likely get an application rejected from the App Store, so you might instead try overriding the public initializer and calling

[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"searchResultsTableViewStyle"];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文