`

关于tabbar和navbar

 
阅读更多

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];

}

}

就好了。

 

//推送到指定视图控制器

XXView *rootViewController = nil;
  for (UIViewController *VC in self.navigationController.viewControllers)

  {
    if ([VC isKindOfClass:[XXView class]]) {
    rootViewController = (XXView *)VC; 
  }
}
[self.navigationController popToViewController:rootViewController animated:YES];

分享到:
评论

相关推荐

    ReactNative的自定义图标支持NavBarTabBarToolbarAndroid图像源和完整的样式

    本文将深入探讨如何在React Native中实现自定义图标的支持,特别是针对NavBar、TabBar和ToolbarAndroid组件,并关注图像源和完整的样式配置。 首先,React Native本身并不直接支持图标库,但它可以通过第三方库来...

    IOS自定义控件集合(TabBar,nav bar等)

    标题提到的“IOS自定义控件集合(TabBar, nav bar等)”涵盖了两个关键组件:TabBar(标签栏)和NavBar(导航栏),这些都是iOS界面设计中的核心元素。下面将详细介绍这两个控件以及自定义它们的方法。 首先,...

    一款基于Taro底部导航组件支持最多5个tabbar

    通过使用 Taro 的组件,开发者可以方便地在不同平台上构建出功能完备且样式一致的 TabBar,提高开发效率和代码复用性。 1. **Taro 底部导航组件的结构** - `Taro.TabBar` 是 Taro 提供的内置组件,它负责显示底部...

    iOS界面跳转时导航栏和tabBar的隐藏与显示功能

    导航栏(NavigationBar)和TabBar(Tab Bar)作为常见的UI元素,它们的隐藏与显示对于提升用户体验有着显著的作用。本文将详细介绍如何在界面跳转时实现导航栏和TabBar的隐藏与显示功能。 一、导航栏隐藏与显示 在...

    自定义导航栏(2)

    在Android应用开发中,自定义导航栏是一种常见的需求,它能提供独特的用户界面和交互体验。本项目主题为“自定义导航栏(2)”,相较于之前的版本,开发者对其进行了简单的修改,尤其是对使用ViewFlipper作为导航...

    SUIMobileMSUI是由阿里巴巴国际UED前端出品的移动端UI库轻量精美

    2. **导航组件**:包括顶部导航(Navbar)、底部导航(Tabbar)、侧滑菜单(SideMenu)等,这些组件为移动应用提供了常见的导航模式,便于用户在应用内的页面间切换。 3. **表单组件**:如输入框(Input)、选择器...

    微信小程序实战之顶部导航栏(选项卡)(1)

    在WXML中,我们定义了一个名为`navbar`的视图容器,它包含了三个可点击的文本元素,分别代表顶部导航栏的三个选项卡:'首页'、'搜索'和'我'。每个文本元素都有一个`wx:for`属性,用于遍历数据数组`navbar`,并使用`...

    Axure移动端组件库 完整版v1.rp

    标签栏 TABBAR 导航栏 NAVBAR 吐司 TOAST 按钮 BUTTON 表单输入 INPUT 列表 LIST 弹出菜单 ACTION SHEET 提示页 MSG 对话框 DIALOG 面板 PANEL 表单预览 PREVIEW 进度条 PROGRESS 加载 LOAD MORE 图标...

    MUI Demo.zip

    2. 底部 Tab(Tabbar):作为页面间的切换工具,MUI的Tabbar组件支持静态和动态两种模式,可以通过数据绑定实现内容的实时更新。示例代码展示了如何创建一个带有多个页面的Tabbar,以及在点击时切换页面的实现方式。...

    Weex AppFramework架构设计和独立App构建实战 宁栗.pdf

    12. **页面导航**: Weex使用URL Router实现页面间的跳转,通过组件如wxc-navbar、wxc-navpage、wxc-tabbar和wxc-tabitem来构建导航栏和底部Tab。 13. **多实例管理**: Weex的JS Framework可以管理多个实例...

    基于Vue3.4、Vite5、Vant4、Pinia、Typescript、UnoCSS等主流技术开发,集成暗黑模式和系统主题色,且持久化保存,集成模拟数据,包括登录,注册,回,keep-al.zip

    顺便写了登录/注册/回找密码页面(包括逻辑),只需替换你的API即可,其他页面都可以,随便写了一个包含NavBar、TabBar的布局,集成了Axios、useECharts、IconSvg。项目使用了antfu大佬的antfu/eslint-config作为...

    iphone移动商城,mint-ui移动开发.zip

    2. 导航栏和底部TabBar:Mint-UI的NavBar和Tabbar组件可创建标准的导航栏和底部选项卡,增强用户体验。 3. 搜索功能:Search组件可以实现搜索框的功能,支持清除和自动补全。 4. 购物车:Cell、Switch和Radio等组件...

    微信小程序----导航栏透明渐变一

    总结起来,通过CSS3的`opacity`属性和微信小程序的事件监听机制,我们可以轻松实现导航栏的透明渐变效果,提升用户界面的美观性和交互性。同时,了解如何有效利用Web Worker和离屏画布的概念,对于优化小程序的性能...

    MUI 演示演示

    3. **导航(Nav)**:MUI 提供了底部TabBar、顶部NavBar等多种导航模式,确保用户在应用中的流畅导航。 4. **下拉刷新(PullRefresh)**:MUI 内置下拉刷新功能,用户只需简单配置即可实现列表的下拉刷新效果。 5....

    wxcomponents/

    4. 导航组件:如NavBar导航栏、TabBar底部标签栏、Pagination分页、Breadcrumb面包屑、DropdownMenu下拉菜单等,用于页面间的导航和操作。 5. 操作反馈组件:如Dialog对话框、Toast提示、Loading加载、ActionSheet...

    移动开发前端框架

    2. **组件丰富**:框架内含多种组件,如导航栏(navbar)、底部栏(tabbar)、下拉菜单(dropdown)、轮播图(swiper)、弹框(modal)等,这些组件可以快速搭建出常见的移动端页面结构。 3. **易用性**:frozeUI ...

    Book-Learn-Flutter:关于学习Flutter的积累

    日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀... tabbar和列表组件的使用 d. http请求JSON数据,并渲染到列表 e. 组件之间的通信 f. 路由(带参数路由) 点击前往 Flutter学习之入门和

    WeUI样式demo

    WeUI提供了底部导航栏(TabBar)和页面头部导航(Navbar),它们在微信应用中起着导向作用。在demo中,你可以看到如何设置导航栏的图标、文字以及选中状态。 5. **列表(Lists)**: 列表组件包括普通列表项、带...

    jquery.mobile

    - **导航栏(Navbar)**: 可以创建类似 iOS 应用顶部的导航栏,包含标题和可选的操作按钮。 - **列表视图(Listview)**: 支持分组、嵌套、多选等,模拟 iOS 的联系人或消息列表。 - **对话框(Dialog)**: 实现...

    Weex AppFramework架构设计和独立App构建实战

    - **页面路由**:支持多种导航体系,例如TabBar、Navigator、URLRouter等。 - **生命周期管理**:Weex定义了明确的生命周期钩子,如created、ready、render、updated、destroy等,让开发者可以精确控制页面的各个...

Global site tag (gtag.js) - Google Analytics