7

我有一个管理多个控制器的 UITabBar 控制器(使用 SDK 3.0)。其中之一是 tableView 控制器,我需要使用 UISearchDisplayController 提供搜索功能。我的所有代码都基于 Apple TableSearch 示例。但是,当单击选项卡时,tableView 控制器出现显示其相关内容,但没有出现 searchBar。我已经检查了 IB 中的 xib 以确保所有的网点都已正确设置,但无论我如何尝试 self.searchDisplayController 始终为 nil 并且搜索栏不会出现。

在实践中,我从 TableSearch 示例中复制了 MainView.xib,并将文件的所有者类设置为选项卡的正确控制器类。插座的设置与示例 MainView.xib 中的一样。我是否错过了任何重要的步骤或做错了什么?

先感谢您。

4

7 回答 7

5

我有同样的问题,碰巧偶然发现了这个解决方案......

如果您UISearchDisplayController使用 Interface Builder 将表格视图控制器(例如)嵌套在选项卡栏或导航控制器中,则需要在“属性检查器”窗口中设置“笔尖名称”。

Nib 名称将是包含表视图并具有控制器(例如UISearchDisplayController)作为文件所有者的名称。

于 2010-01-22T20:47:32.727 回答
1

我也有这个问题:(搜索栏是否隐藏在 tableview 后面?

@unforgiven,你试过这个吗……?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

这会手动创建一个搜索栏并且可以正常工作。但是我在 IB 中犯了一些愚蠢的错误,即使我的连接是完美的,SearchBar 也没有出现。:-(

如果您得到答案,请更新此帖子...

于 2009-08-30T08:00:01.977 回答
1

好的,我已经找到了解决方法。在我的情况下,问题是由于我使用嵌入在 UITabBarController 中的控制器作为其托管选项卡之一(即作为孩子)。

从 UITabBarController 中删除控制器,然后将 UINavigationController 添加到 UITabBarController,最后将我的控制器作为 UINavigationController 的子级完全解决了这个问题。

我不明白为什么会这样(文档中没有相关信息,这经常发生);然而,它现在就像一个魅力。亲切的问候。

于 2009-08-30T09:22:09.267 回答
1

我有一个类似的问题

为了解决这个问题,我不得不在我的主笔尖上再做一步才能得到不可原谅的答案

1) 创建一个 UITabController 2) 然后我将 UINavigational Controller 拖到选项卡控制器中 3) 然后将 UITableViewController 作为子项拖到 NavigationalController 4) 然后将 (3) 类更改为检查器中的 MyTableWithSearchBarViewController - 检查是否笔尖名称是正确的,如有必要,也可以在检查器中更改它 5)然后我不得不删除由 IB 在步骤(3)中自动创建的 tableView。只有这样,搜索栏才会正确显示...

如果在第 3 步中我将不同的控制器拖到舞台上或将 tableView 留在那里,它只会显示表格而不显示搜索栏

奇怪的

于 2010-01-17T02:57:57.880 回答
1

如果您的 nib 文件包含 UITableViewController,Tomtrapeze 有正确的答案。但是,如果您在代码中加载 UITableViewController——例如将其推送到 UINavigationController 的堆栈中——解决方案会有所不同。

初始化 UITableViewController 或子类时,您需要使用 -initWithNibName:bundle: 形式的初始化程序并指定您的 nib 文件的名称。或者,您可以使用标准的 -initWithStyle: 初始化程序并在加载视图之前手动设置 nibName 属性。

如果在加载视图时未设置 nibName 属性,则 UITableViewController 将不会使用正常的 UIViewController nib 查找逻辑。它只会加载一个标准的 UITableView 。

于 2011-05-03T01:25:37.887 回答
1

我最近了解到,[[MyViewController alloc] initWithNibName:nil bundle:nil];当 NIB 文件与类具有相同的名称(即MyViewController.xib)时,我可以加载 NIB 文件。事实证明,以这种方式初始化会导致“UISearchBar andUISearchBarDisplayController”不显示。当我通过实际输入类的名称来初始化视图控制器时,我的搜索栏正确显示。我最初认为这与我呈现视图控制器的方式有关,但很高兴事实并非如此。

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

这是使用 iOS SDK 5.1 和 XCode 4.3.1。

于 2012-05-09T16:32:46.993 回答
0

另一个对我有用的可能修复方法是使用 initWithNibName:bundle 初始化 UITableViewController:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

在将 UITableViewController 放入 UINavigationController 之前将其嵌套在 UITabBarController 中并不能解决我的问题......

于 2011-12-27T03:51:04.647 回答