将选项卡式视图添加为基于导航的iphone应用程序的主视图

时间:2013-07-04 12:31:42

标签: ios uinavigationcontroller uitabbarcontroller uistoryboard

我对iOS比较陌生,因此我对我的问题中的任何不一致表示道歉。对于我正在尝试构建的应用程序,我需要帮助解决以下问题。我的问题是:我正在使用的应用程序具有基于导航的功能,具有tableview(每天由用户填充)和详细的tableview列出用户的输入,但这只是应用程序的一个功能。 我希望有一个基于主选项卡的视图,其中一个选项卡(每个选项卡代表一个功能)指向此模块。

我想要求步骤和更改,例如 app delegate rootviewcontroller (我可以发布代码,如果它有助于更​​好地制作,以便应用程序以多标签栏视图开始,其中一个标签指向链接到基于导航的应用程序的 rootviewontroller 的视图。

摘要:需要一个主标签栏视图,其中一个标签指向屏幕截图中突出显示的rootviewcontroller(链接如下)

如果有帮助,这里是我在app delegate中的相关功能代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    RootViewController *rootViewController = (RootViewController *)[[navigationController viewControllers] objectAtIndex:0];
    rootViewController.managedObjectContext = self.managedObjectContext;

    //Next TWO LINES FOR COLOR BACKGROUND

    [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setBackgroundColor:[UIColor redColor]];

}

PS:这是故事板的截图:我希望有一个标签引用视图(在屏幕截图中突出显示),它是链接类rootviewcontroller.m / h

屏幕截图: http://i.stack.imgur.com/G9AXI.png

编辑:实际问题可以看作:如何以及如何才能拥有 tabbarviewcontroller ,我将使用storyboard 添加 / strong>我的 rootviewcontroller 而不是导航控制器(在屏幕截图中以黑色突出显示http://i.stack.imgur.com/G9AXI.png)。

我当前的rootviewcontroller.m管理与当前navigationviewcontroller的tableview相关的任何内容,我是否还需要更改它?。

我为多余的细节道歉,我是iOS开发人员的新手。


从这个 http://i.stack.imgur.com/suLBm.png我尝试将故事板嵌入到标签barviewcontrol中 http://i.stack.imgur.com/TZxLo.png我试图嵌入标签控制器只是故事,但我得到一个错误:'NSInvalidArgumentException',原因:' - [UIViewController setManagedObjectContext:]:无法识别的选择器发送到实例0x8184e30'

与此相关的类是(尤其是rootviewcontroller.m,它现在是一个导航控制器:

的AppDelegate。{H,M} 配置Core Data堆栈和第一个视图控制器。

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    RootViewController *rootViewController = (RootViewController *)[[navigationController viewControllers] objectAtIndex:0];
    rootViewController.managedObjectContext = self.managedObjectContext;


}

RootViewController的。{H,M} 管理表格视图以列出输入的所有值。提供添加和删除这些值的控件。

- (void)viewDidLoad
{
    [super viewDidLoad];
self.navigationItem.leftBarButtonItem = self.editButtonItem;
}

DetailViewController。{H,M} 管理详细信息显示以显示每个输入值的显示详细信息。

我最初的猜测是我需要更改rootviewcontroller appdidfinishlaunching

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

因此,您实际上需要故事板中的UITabBarViewController,如果您希望能够推送其他控制器,则可以指向UINavigationController

只要UINavigationControllersrootviewcontroller,您就不需要我在屏幕截图中看到的其他UINavigationController。 您可以将UINavigationController添加为第一个选项卡,然后您可以使用您需要显示的viewcontrollers填充其他选项卡。

所以基本上你需要创建UITabBarController作为rootviewcontroller

如果我理解你的问题,请告诉我。

以下是UITabBarController的示例:

 - (void)applicationDidFinishLaunching:(UIApplication *)application
{
//Here you set your controller
UIViewController* centerController = [[UIViewController alloc]init];

UINavigationController *navCenter = [[[UINavigationController alloc] initWithRootViewController:centerController] autorelease];

UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease];

tabBarController.viewControllers = [NSArray arrayWithObjects:navCenter,nil];

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.window.rootViewController = tabBarController;

return YES;
}

让我知道它是否有效。

你应该有这样的事情: This is how it should look

答案 1 :(得分:0)

事实上现在你有:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
 UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
RootViewController *rootViewController = (RootViewController *)[[[[tabController viewControllers] objectAtIndex:0] viewControllers] objectAtIndex:0];
rootViewController.managedObjectContext = self.managedObjectContext;

}