2009-08-10 102 views
7

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

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

预先感谢您。

回答

1

好的,我发现如何解决它。在我的情况下,问题是由于我使用嵌入在UITabBarController中的控制器作为其托管标签之一(即作为子标签)。

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

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

+0

这仍然适用于2017年11月。有一个很好的图表显示如何将UINavigationController添加到标签页[此处](https://stackoverflow.com/a/37357242/1359088)。 – 2017-11-14 21:19:43

1

我也有这个问题:(是搜索栏得到隐藏在背后的tableview?

@unforgiven, 你试试这个...?

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

这手动创建一个搜索栏和它的工作原理,但我做了一些愚蠢的错误在IB的搜索栏没有显示出来,尽管我的连接是完美的。:-(

做,如果你得到的答案更新这个帖子...

1

我有一个类似的问题

为了解决我必须做一个额外的步骤unforgivens回答 在我的主要笔尖

1)创建UITabController 2)然后我拖出UINavigational控制器进入选项卡控制器 3)然后将UITableViewController作为子项拖入NavigationalController中4)然后在检查器中将(3)类更改为MyTableWithSearchBarViewController - 检查nib名称是否正确,并在检查器中将其更改为井 5)那我必须删除步骤(3)中由IB自动创建的tableView。只有这样,在搜索栏中显示正确...

如果在第3步我拖出不同的控制器走上舞台或离开的tableView有它永远只能显示表,而不是搜索栏

怪异

5

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

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

笔尖名称将是持有表格视图并将控制器(例如UISearchDisplayController)作为文件所有者的名称。

1

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

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

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

0

另一个可能的修复为我的作品是initWithNibName给init的UITableViewController:包:

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

要巢中的UITableViewController一个UINavigationController把前一个的UITabBarController不解决这个问题对我来说。 ..

1

我最近得知,当NIB文件与班级名称相同(即MyViewController.xib)时,我可以加载NIB文件[[MyViewController alloc] initWithNibName:nil bundle:nil];。事实证明,初始化这种方式会导致'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。

+0

是的,使用SDK 5.1,现在情况好多了。 – 2012-05-10 05:31:56

相关问题