【问题标题】:UITabbar loads 2 views on app start instead of just the first oneUITabbar 在应用程序启动时加载 2 个视图,而不仅仅是第一个视图
【发布时间】:2011-05-11 01:34:19
【问题描述】:

我有一个带有 4 个按钮的 uitabbar。启动屏幕在应用程序启动时加载。 2 个按钮视图在启动时未加载(好)。 1 是 web 视图,另一个是带有表格视图的导航控制器。最后一个视图在应用程序启动时加载。它是另一个带有表格视图的导航控制器。

我知道哪些正在加载,哪些没有,因为我在所有顶级控制器的 didload 函数中添加了 nslogs。

所以总体问题是,当我启动我的应用程序时,然后旋转它,然后进入已经在作为 web 视图的 tableview 中加载标题的标签栏项目,从来没有得到它应该旋转的备忘录,并因此调整大小。一旦你在视图中来回旋转,它就会正常工作。它只是最初的时间。

更新 1: 问题是如何阻止标签栏另一个按钮上的第二个控制器在应用启动时加载。

更新 2: 我在 didload 中做了所有的初始化工作,但我尝试添加以下代码,但它从未出现在日志中。我没有使用 IB,这都是以编程方式完成的:

    - (void)loadView
    {
        NSLog(@"Loading feedback");
    }

更新 3: 我弄清楚是什么原因造成的。我确实有一个 xib 来容纳我的 tabbarcontroller。在那个 tabbarcontroller 我有一个导航控制器,然后我有一个视图控制器(我将类设置为我的反馈类),然后我有导航项和表视图。当我添加表格视图时,它会触发控制器加载。简单地删除它会阻止它提前加载。然后为了修复它,我为反馈创建了一个 xib。所以我不喜欢有一个服务于单一目的的笔尖,在这种情况下,它可以在那里获得一个表格视图并让它成为一个分组样式。我可能会尝试手动添加 tableview 而不是使用 tableview 控制器。

【问题讨论】:

  • 你在 loadView 方法中有那些视图控制器的加载代码吗?
  • 我不明白你的问题是什么?您是在暴露问题寻求解决方案,还是缺少某些东西?

标签: iphone uitabbar


【解决方案1】:

在代码中更容易实现。标签栏控制器接受数组中的视图控制器,默认的标签栏控制器是标签栏控制器的第一个索引。

      UITabBarController *tabBarController = [UITabBarController alloc] init];
      tabBarController.viewControllers=[NSArray arrayWithObjects:firstViewConoller,secondViewController,nil];
       [self.view addSubview : tabBarController.view];

将所有与视图相关的任务放在 viewDidLoad 方法中,有时 loadView 会出现问题,这可能是因为您的 viewController 试图加载一个新的视图,该视图一次又一次地调用自己,所以最好将它们添加到 viewDidLoad。

【讨论】:

    【解决方案2】:

    过早加载的选项卡的视图控制器可能会在需要之前访问self.view 属性。

    如果很难找到访问点,请在loadView 中添加断点,仅在需要时调用[super loadView] 进行虚拟重载(从NIB 加载视图)。断点堆栈跟踪将显示您强制加载发生的位置。

    【讨论】:

    • 我更新了问题。但为了澄清,我在控制器中调用了加载视图,它过早地加载,它似乎根本没有被调用。我还在该控制器中搜索超级、自我和视图,但没有看到任何非默认值(如 [super viewDidLoad];
    • @Todd Horst - 这看起来很奇怪,您是否在将UITabBarController 的视图添加到窗口后以编程方式更改选项卡?或者您是否有一个覆盖loadView 的子类,再次,您通过登录实现了它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多