zoukankan      html  css  js  c++  java
  • UITabBarController注意的地方

    如果你的程序界面如上图所示的这个样子,那么你一定是同时使用了UITabBarController以及UINavigationController吧。

    再如果,你希望实现这样子的效果:

    1。用户起初在“分类”这个视图里面查看了一些菜系,

    2。然后他点击了“搜索”Tab,又在里面看了一些搜索出来的菜谱,

    3。再然后当他准备回到“分类”这个视图的时候,事实上用户心里是希望回到“分类”这个视图的根视图,在那里重新选择分类,进入分类再看菜谱。但是iPhone默认是记忆用户之前在第一步里面的那个视图的,不会自动回到根视图。

    解决办法是将这个

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    viewController popToRootViewControllerAnimated:YES];

    }

    添加到AppDelegate.m文件中。一般人都是这么做的。

     

    但是!

     

    其实在这里隐藏着一个问题,如果如图所示你的4个TabBar都是指向4个NavigationController,那么没有问题,运行OK。

    但如果你的4个TabBar有任何一个指向的不是NavigationController,那么程序就会crash。因为非NavigationController不能够响应 popToRootViewControllerAnimated: 方法。

    我的第4个TabBar指向的是一个ViewController,程序运行之后一点击第4个TabBar就崩溃,自己也只是在ViewController和IB里面仔细找错误,浪费了很多时间。

     

    下面贴出更加安全的方法,把上面的那段代码改成这样子:

     

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    if ([viewController isKindOfClass:[UINavigationController class]]) {

    [(UINavigationController *)viewController popToRootViewControllerAnimated:YES];

    }

    }

    就好了。

  • 相关阅读:
    Android中对同一个TextView设置不同字体样式
    C++之new和malloc区别
    cocos2dx 在android平台打开文件问题
    基于物联网操作系统HelloX的智慧家庭体系架构
    密码学:SHA1加密算法详解
    Android中最简单的分享功能
    Android设置ProgressBar的前景和背景及其在多线程中的刷新
    【有明信息】虚实之间 ---关于企业架构是与非的探讨
    5.1.1 读取Redis 数据
    hdr(host), hdr_beg(host) , path_beg
  • 原文地址:https://www.cnblogs.com/yeagen/p/2388151.html
Copyright © 2011-2022 走看看