代码之家  ›  专栏  ›  技术社区  ›  Padu Merloti

在iPhone上使用一个视图调用选项卡式视图的最佳方法

  •  1
  • Padu Merloti  · 技术社区  · 16 年前

    让我简化这个问题:假设您的应用程序 使用3个选项卡查看。主视图已显示 三个名为“Tab1”的标准按钮, “表2”和“表3”。当你点击 “Tab1”,选项卡式视图应为 Tab2和Tab3也是如此。

    有什么提示吗?
    /编辑

    我想做的是:当我的iPhone应用程序初始化时,它会显示一个带有一个按钮的视图。当我点击这个按钮时,它应该进入一个选项卡式视图。

    我所做的和它不起作用的方式(得到一个未捕获的异常):我从基于视图的模板创建一个项目开始。在自动创建的视图控制器上,我声明了另一个名为TabbedViewController的视图控制器。下面是头文件:

    #import <UIKit/UIKit.h>
    
    @class TabbedViewController;
    
    @interface DZBluePagesViewController : UIViewController {
        TabbedViewController *tabbedViewController;
    }
    
    @property (nonatomic, retain) TabbedViewController *tabbedViewController;
    
    -(IBAction)goToTabbedView:(id)sender;
    
    @end
    

    我创建了一个名为 TabbedView 并将文件所有者的类标识设置为TabbedViewController。我还拖动了一个选项卡栏控制器。

    我在主视图中添加了一个按钮,以下是我在主视图控制器文件中与之关联的操作:

    - (void)viewDidLoad {
    
        TabbedViewController *tvc = [[TabbedViewController alloc] 
                                     initWithNibName:@"TabbedView" bundle:nil];
        self.tabbedViewController = tvc;
        [tvc release];
    
        [super viewDidLoad];
    }
    
    
    
    -(IBAction)goToTabbedView:(id)sender {
    //  [self.view removeFromSuperview];
        [self.view insertSubview:tabbedViewController.view atIndex:0];
    }
    

    我在insertSubview调用中收到一个未捕获的异常。。。到目前为止,我已经在多视图应用程序上做了3到4个教程(来自iPhone Development-Mark和LaMarche-book),我想我已经准备好在没有任何人牵着我的手的情况下做一个了。。。显然是错的。有人能帮忙吗?

    4 回复  |  直到 16 年前
        1
  •  1
  •   benzado    16 年前

    我认为您需要第三个“根”视图和视图控制器来作为主视图和选项卡栏视图的超级视图。

    当应用程序启动时,根视图将加载主视图的内容。可以在根视图控制器内使用以下行执行此操作:

    homeViewController.view.frame = self.view.bounds;
    [self.view addSubview:homeViewController.view];
    

    [homeViewController.view removeFromSuperview];
    tabBarViewController.view.frame = self.view.bounds;
    [self.view addSubview:tabBarViewController.view];
    

    这里有一个陷阱:viewwillappease:,viewdiddappease:方法不会被调用,除非您自己调用它们,所以您也必须将它们插入正确的位置。

    关于例外情况

    您发布的代码似乎与您发布的异常无关。 See this blog post for instructions on setting a global breakpoint on thrown exceptions

        2
  •  0
  •   justin    16 年前

    出现异常时,打开运行控制台(shift-command-R)。把它贴出来。您可能还希望打开控制台,并在提示下键入“bt”作为“回溯”。

    发布异常。

        3
  •  0
  •   Ben Gottlieb    16 年前

    我建议使用UINavigationController,然后在他们选择按钮后将tabController推到上面。如果不需要幻灯片动画,只需对动画:参数传递NO。

        4
  •  0
  •   Jasarien    16 年前

    推荐文章