【问题标题】:Navigation Based Application with TabBar使用 TabBar 的基于导航的应用程序
【发布时间】:2009-03-01 03:32:10
【问题描述】:

我有一个基于导航的应用程序,它显示了一个表格视图,您可以在其中选择一个单元格,它会将您带到该单元格的“详细信息视图”。我希望这个视图有一个 TabBar,我可以在其中选择 3 个子视图。我在网上找到了几个解决方案,但没有一个很有帮助。是否有专门针对此的教程,或者他们的源代码是否说明了如何完成?谢谢

【问题讨论】:

    标签: iphone navigation tabbar


    【解决方案1】:

    基本上你需要做的就是将一个 Tab View Controller 推送到 Navigation Controller 的 viewcontroller 堆栈上。

    从一个全新的“基于导航的应用程序”模板开始。我在 RootViewController.m 中添加了以下方法:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //Navigation logic may go here. Create and push another view controller.
    UIViewController *viewOneViewController =   [[UIViewController alloc] init];
    viewOneViewController.title = @"One";
    viewOneViewController.view.backgroundColor = [UIColor redColor];
    
    UIViewController *viewTwoViewController =   [[UIViewController alloc] init];
    viewTwoViewController.title = @"Two";
    viewTwoViewController.view.backgroundColor = [UIColor orangeColor];
    
    UIViewController *viewThreeViewController = [[UIViewController alloc] init];
    viewThreeViewController.title = @"Three";
    viewThreeViewController.view.backgroundColor = [UIColor greenColor];
    
    UITabBarController *anotherViewController = [[UITabBarController alloc] init];
    anotherViewController.viewControllers = [NSArray arrayWithObjects:viewOneViewController, viewTwoViewController, viewThreeViewController, nil];
    [self.navigationController pushViewController:anotherViewController animated:YES];
    [anotherViewController release];
    

    }

    将此更改为 25 以进行测试:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return 25;
    }
    

    现在,当我构建和运行时,我将以基本方式查看您正在寻找的内容。完成这项工作后,您要做的是将 UIViewControllers 更改为您创建的自定义子类,以保存每个视图的代码。 (如果您也在使用 Interface Builder,请将 init 更改为 initWithNibNamed:)。

    希望这可以帮助您顺利上路。

    【讨论】:

    • 您还应该创建一个自定义的 UITabBarController 子类,在其中分配它的 viewControllers,这样更干净,然后将所有内容放在 didSelectRow 方法中。除此之外,您还忘记了一些“发布”。但还是+
    • 如果我们不想使用 xib 的选项卡然后..??
    【解决方案2】:

    您应该知道,如果您这样做,Apple 可能会拒绝您的申请。

    来自“结合标签栏和导航控制器”

    结合标签栏和导航控制器是很常见的,如图 4 所示。为此,您只需将导航控制器添加到标签栏控制器 (但是,您永远不应该将标签栏控制器添加到导航控制器)。

    所以这很可能违反了人机界面指南,所以你可能会被拒绝。

    【讨论】:

      【解决方案3】:

      我正在尝试做同样的事情。应用程序“Tweetie”正在做类似的事情。他们有一个账户的 TableView,然后你选择一个账户,TabBar 就会出现。

      无论如何,直接来自 Apple 的文档:

      pushViewController:动画: 将视图控制器推送到接收器的堆栈并更新显示。

      • (void)pushViewController:(UIViewController *)viewController 动画化:(BOOL)动画化

      参数 视图控制器 压入堆栈的视图控制器。 它不能是标签栏控制器的实例。如果视图控制器已经在堆栈上,则此方法不执行任何操作。

      动画 将此值设置为 YES 以动画过渡。如果您在显示其视图之前设置导航控制器,则传递 NO。

      所以也许我们只是卡住了使用 TabBar 而不是 TabBarController?

      -JP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        相关资源
        最近更新 更多