如何从UITabBar控制器中的控制器使用UISearchDisplayController?

时间:2009-08-10 23:08:33

标签: iphone uisearchbar uisearchdisplaycontroller

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

实际上,我已经从TableSearch示例中复制了MainView.xib,并将文件的所有者类设置为选项卡的正确控制器类。插座的设置与示例MainView.xib中的设置相同。我错过了重要的一步或做错了吗?

提前谢谢。

7 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,碰巧偶然发现了这个问题......

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

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

答案 1 :(得分:1)

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

@unforgiven, 你试过这个吗??

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

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

如果你得到答案,请更新这篇文章......

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

我有类似的问题

要解决我必须做一个额外的步骤来解决难以回答的问题 在我的主笔尖

1)创建一个UITabController 2)然后我将UINavigational Controller拖出到标签控制器中 3)然后将UITableViewController作为子项拖出到NavigationalController中 4)然后在检查器中将(3)类更改为myTableWithSearchBarViewController - 检查笔尖名称是否正确,并在检查器中进行必要的更改 5)然后我必须删除在步骤(3)中由IB自动创建的tableView。只有这样,搜索栏才能正确显示...

如果在步骤3中我将一个不同的控制器拖到舞台上或者离开了tableView那里它只会​​显示表而不是搜索栏

怪异

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

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。

答案 6 :(得分:0)

另一个可行的修复方法是使用initWithNibName初始化UITableViewController:bundle:

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

要将UITableViewController放入UINavigationController中,然后将其放入UITabBarController中,并不能解决问题......