【问题标题】:add a tabbed view as a main view to a navigation-based iphone app将选项卡式视图作为主视图添加到基于导航的 iPhone 应用程序
【发布时间】:2013-07-04 12:31:42
【问题描述】:

我对 iOS 比较陌生,因此对于我的问题中的任何不一致之处,我深表歉意。我需要有关我正在尝试构建的应用程序的以下问题的帮助。我的问题是:我正在使用的应用程序具有基于导航的功能,其中包含一个表格视图(用户每天填写)和一个列出用户输入的详细表格视图,但这只是应用程序的一个功能。 我想要一个基于主选项卡的视图,其中一个选项卡(每个选项卡代表一个功能)指向该模块。

我想询问 步骤和更改,例如 app delegaterootviewcontroller(如果我可以发布代码它有助于更​​好)使应用程序以多选项卡式条形视图开始,其中一个选项卡指的是链接到基于导航的应用程序的 rootviewontroller 的视图。

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

如果有帮助的话,我在应用委托中的相关功能代码:

- (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,我将在情节提要中添加 become 我的 rootviewcontroller 而不是导航控制器(在屏幕截图中以黑色突出显示http://i.stack.imgur.com/G9AXI.png)。

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

对于过多的细节,我深表歉意,我是 iOS 开发的新手。


从这个http://i.stack.imgur.com/suLBm.png我试图只用故事板嵌入标签栏视图控件到这个http://i.stack.imgur.com/TZxLo.png我试图通过故事嵌入标签控制器但我收到一个错误:'NSInvalidArgumentException',原因:'-[UIViewController setManagedObjectContext:]: unrecognized selector sent to instance 0x8184e30'

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

AppDelegate.{h,m} 配置核心数据堆栈和第一个视图控制器。

- (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

有什么建议吗?

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller uistoryboard


    【解决方案1】:

    事实上你现在有:

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

    }

    【讨论】:

    • 我暂时将其作为有效答案,直到我推进该主题并发布有关该问题的更新。谢谢你
    • 当你更新问题时,我会检查并看看发生了什么。
    【解决方案2】:

    因此,您实际上需要在 Storyboard 中添加一个UITabBarViewController,如果您希望能够推动其他控制器,则可以指向UINavigationController

    您不需要其他UINavigationControllers,正如我在您的屏幕截图中看到的那样,只要rootviewcontrollerUINavigationController。 您可以将UINavigationController 添加为第一个选项卡,然后您可以使用需要显示的视图控制器填充其他选项卡。

    所以基本上你需要将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;
    }
    

    让我知道它是否有效。

    你应该有这样的东西:

    【讨论】:

    • 是的,我想要一个标签栏作为我当前应用程序的根视图,并将一个标签链接到当前在 屏幕截图中用作 rootcontroller 的“导航控制” 。试图通过情节提要做到这一点,但它崩溃了。关于如何以编程方式执行此操作的任何指令?我将编辑问题以便在 rootviewcontroller.m 中添加代码
    • 我试过了,但是当我启动它时出现黑屏,但它只是显示黑屏......我做错了什么吗?你能列出我需要做的改变吗?
    • 这是一个教程,我只是在那儿举了一个例子:uitabartutorial
    • 我明白了,我不确定这是否是我需要的,有没有办法用故事板对象组件来做到这一点?
    • 当然有可能,在故事板中更容易。您将UITabBarController 添加到工作表,将其分配为InitialViewController,然后将UINavigationController 添加到工作表,UIVIewController 并使UIViewController 成为rootViewController of the UINavigationController。然后将一条线从UINavigationController 拖到UITabBarController 并选择viewControllers from the outlet。它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多