0

我想结合UITableView和UINaviationController在一个应用程序,但作为新手我见过的大多数应用程序只是直接发送到结果视图(UITableView)。但是,我想一个“正常”的搜索应用程序并不假定你在第一个屏幕上有结果。第一个屏幕上应该有一个搜索表单,其中包含输入字段和一个触发搜索过程并显示一些结果和导航的按钮。如何在“搜索”应用程序中使用UItableView和UINavigationController?最佳实践

所以,我只是试图在我的应用程序中复制这种正常行为。我已经制作了搜索表单(当然没有显示任何导航)以及一个名为“ListingViewController”的分离的View以及与之相关的View,并且包含一个UITableView,我认为我应该在其中添加导航...下一个想法将会是制作一个DetailViewController和可能和ListingMapController在GoogleMap中显示列表。

那么,我卡在哪里是如何添加此导航控制器?

有人建议我将其添加在SearchViewController委托... 但我不想当然搜索表单上的导航...

有人建议我去开模态导航控制器... 但是,我也计划添加一个标签栏,以允许用户看到其他信息(如关于等...),并与一个模式导航控制器,我不知道他们是否仍然会看到底部的Tabbar ..

有什么建议吗?您认为最佳做法是什么?特别是为了避免我的应用被Apple拒绝?

Thx提前阅读和帮助!

斯特凡

回答

1

你可以与你的视图控制器初始化的navigationController为根视图控制器。然后隐藏导航条(如果需要的话)。然后,您将添加navigationController.view作为子视图。这将基本看起来像原始视图控制器。然后你可以pushViewController:animated:推结果视图Controller。

因此,例如在你的AppDelegate(或在适当的视图控制器):

创建一个UINavigationController的属性和伊娃和界面生成器钩住它的出口。然后将搜索控制器设置为导航栏的根视图控制器,并将其添加为子视图。

MySearchViewController* searchController = [[MySearchViewController alloc] init]; 
self.myNavigationController = [[UINavigationController alloc] initWithRootController:searchController]; 
[searchController release]; 
self.myNavigationController.navigationBarHidden = YES; 
[self.window addSubview:self.myNavigationController.view]; 
[self.window makeKeyAndVisible]; 

然后当然在你searchController,你就简单的说:

ResultsViewController* myResultsViewController = [[MyResultsViewController alloc] init]; 
//You may want to create another init method and pass in some arguments like an array: 
// [[MyResultsViewController alloc] initWithResults:results]; 

然后从结果的viewController推的viewController

//This is in your search controller class 
[self.navigationController pushViewController:myResultsViewController Animated:YES]; 
[myResultsViewController release]; 

,找回你弹出视图控制器关闭navigationController视图控制器的堆栈。

//In results view controller perhaps in some IBAction for a back button: 

-(IBAction)backButtonPressed:(id)sender 
{ 

    [self.navigationController popViewControllerAnimated:YES]; 

} 
+0

现在在App委托的didFinishLaunchingWithOptions样子: self.window.rootViewController = self.viewController; [self。窗口makeKeyAndVisible]; 返回YES; 根据您的建议,我在app委托头文件中添加了一个实例变量:UINavigationController * ListingNav;然后在同一文件中的属性以及实现文件中的相关合成语句。现在,我试图按照你所说的将searchController添加为rootView,但是我看到你在将它添加到导航控制器后才会释放searchContoller ...它是正确的吗? – Steve

+0

将searchController添加到UINavigationController时,它将由UINavigationController保留。您可能会也可能不想要发布它,具体取决于您的应用程序的工作方式。我的答案的主要观点是,通过将视图控制器嵌套(作为UINavigationController的根视图控制器)(因缺乏更好的术语),您可以在根视图控制器之上推送和弹出其他视图控制器。我有时会添加一个UITabbar(不是UITabbarController),然后为一些或全部选项卡添加一个带有根视图控制器的UINavigationController。 – cdasher

相关问题