iOS_25_彩票骨架搭建+导航栏适配

最终效果图:

Main.storyboard

初始化的控制器是:导航控制器

它的根控制器是:TabBarController

TabBarController的底部是一个自定义的TabBar

里面添加了5个TabBarItem

点击每一个item,

会将tabBar上的对应item的子控制器的navigationItem的值,

转移(赋值,复制)给TabBarController的navigationItem,

从而显示在导航栏上,

因为TabBarController就是导航控制器的根控制器,也同时就是栈顶控制器,导航控制器
只知道它的存在

//
//  BeyondTabBarController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondTabBarController.h"
#import "BeyondTabBar.h"
#import "BeyondTabBarItem.h"
#import "BeyondTabBarDelegate.h"
@interface BeyondTabBarController ()<BeyondTabBarDelegate>

@end

@implementation BeyondTabBarController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 1.釜底抽薪  直接删除默认的tabBar
        [self.tabBar removeFromSuperview];

        // 2.创建tabbar
        BeyondTabBar *myTabBar = [[BeyondTabBar alloc] init];
        // 占位原来的tabBar
        myTabBar.frame = self.tabBar.frame;
        // 代理设置后,可以接收tabBar内部按钮的点击状态切换
        myTabBar.delegate = self;
        // 添加到当前控制器的view
        [self.view addSubview:myTabBar];

        // 3.由于 图片名的规律性,一次性添加5个tabBarItem按钮
        for (int i = 1; i<=5; i++) {
            NSString *normal = [NSString stringWithFormat:@"TabBar%d", i];
            NSString *selected = [normal stringByAppendingString:@"Sel"];
            // 调用tabBar开放出来的接口,向tabBar内部添加按钮,只要传参:图片名
            [myTabBar addOneTabBarItem:normal selectedIconName:selected];
        }
    });
}

#pragma mark - tabbar代理方法
- (void)tabBar:(BeyondTabBarItem *)tabBar didSelectButtonFrom:(NSUInteger)from to:(NSUInteger)to
{
    // 1.直接通过索引  选中某个控制器(这个是UITabBarController自带的API)
    self.selectedIndex = to;

    UITableViewController *newVC = self.childViewControllers[to];
    // 2.将tabBar上的对应按钮的子控制器的navigationItem值转移给TabBarController,因为导航控制器的根控制器就是TabBarController,导航控制器 只知道它的存在
    [self.navigationItem copyFromItem:newVC.navigationItem];
}@end

导航栏的适配

只需提供64高和44高的背景图片即可

//
//  BeyondNavigationController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondNavigationController.h"

@interface BeyondNavigationController ()

@end

@implementation BeyondNavigationController

#pragma mark 一个类只会调用一次
+ (void)initialize
{
    // 1.取出设置主题的对象
    UINavigationBar *navBar = [UINavigationBar appearance];
    UIBarButtonItem *barItem = [UIBarButtonItem appearance];

    // 2.设置导航栏的背景图片
    NSString *navBarBg = nil;
    // 判断iOS7
    // [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0
    if (iOS7) {
        // 使用64高度的图片,做导航栏背景图片
        navBarBg = @"NavBar64";
        // 设置导航栏的渐变色为白色(iOS7中返回箭头的颜色变为这个颜色:白色)
        navBar.tintColor = [UIColor whiteColor];
    } else {
        // 非iOS7,使用44高度的图片
        navBarBg = @"NavBar";
        // 黑色的顶部状态条
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
        // 设置导航栏按钮的背景图片
        [barItem setBgImgForNormal:@"NavButton" highlighted:@"NavButtonPressed"];

        // 设置导航栏返回按钮的背景图片
        [barItem setBackBtnBgImgForNormal:@"NavBackButton" highlighted:@"NavBackButtonPressed"];
    }

    [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault];

    // 3.设置导航栏标题颜色为白色
    [navBar setTitleTextAttributes:@{
                                     NSForegroundColorAttributeName : [UIColor whiteColor]
                                     }];

    // 4.设置导航栏按钮文字颜色为白色
    [barItem setTitleTextAttributes:@{
                                      NSForegroundColorAttributeName : [UIColor whiteColor],
                                      NSFontAttributeName : [UIFont systemFontOfSize:13]
                                      } forState:UIControlStateNormal];
}

#pragma mark 控制状态栏的样式
/*
 状态栏的管理:
 1> iOS7之前:UIApplication
 2> iOS7开始:交给对应的控制器去管理
 */
- (UIStatusBarStyle)preferredStatusBarStyle
{
    // 白色样式
    return UIStatusBarStyleLightContent;
}

@end
时间: 2024-10-05 23:53:18

iOS_25_彩票骨架搭建+导航栏适配的相关文章

IOS7 导航栏适配二

ios7下的app都是全屏的,意思就是所有控制器的view默认都是从  屏幕的 (0,0)开始. 这时候用到导航栏时,往往会出现被导航栏挡住情况. 最明显的是用到tableView时,第一行的数据会被导航栏遮盖 两种解决方法: 一.在控制器下设置导航控制器的导航栏的translucent(半透明)属性为NO,translucent属性在ios6之前默认为no,而在ios7下的导航栏默认却是半透明的,为yes,所以该属性不会占据空间.前提是你不需要导航栏半透明效果. 二.在控制器下设置导航控制器的

IOS7 导航栏适配

问题: Appdelegate中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ViewController *VC=[[ViewController alloc]init]; UINavigationController *nav=[[UINavigationController alloc]initWithRootVi

iOS 开发之 - iOS6适配 - 导航栏按钮透明方法

首先上张图: 1:ios6导航栏默认按钮 rightBarButtonItem   是不是很丑的赶脚? 现在通过以下方法来改变以下:code: UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(0, 0, 40, 40); [rightButton setTitle:@"提交" forState:UIControlStateNormal

IOS7 适配时导航栏变黑

当适配IOS的布局时遇到问题:导航栏和菜单栏后台会变黑色. self.edgesForExtendedLayout = UIRectEdgeNone; 原因是系统默认这两个控件是半通明的. 解决方案: self.navigationController.navigationBar.translucent = NO; self.tabBarController.tabBar.translucent = NO;

使用bootstrap3.0搭建一个具有自定义风格的侧边导航栏

由于工作变动,新的项目组,可能会涉及到更多的类似于后台管理系统这一类的项目,而且开发可能更加偏向于传统型的开发,希望今后能够在新的项目中能够用得上vuejs吧! 接手项目的时候,就是一个后台管理系统,而且采用了Bootstrap进行搭建,页面大致模型也基本搭建成功了.然后看到页面上有一个侧边栏,之前是他们从别的地方找出来的一个侧边栏,给人的感觉总是差那么点意思.所以重构了一下.具体的效果,请移步bootstrap-sidebar . 其实主要就解决了两个问题: 1.与内容等高,最小高度为一屏的高

基于Mint UI开发VUE项目一之环境搭建和头部底部导航栏的实现

一:简介 Mint UI 包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要.通过它,可以快速构建出风格统一的页面,提升开发效率.真正意义上的按需加载组件.可以只加载声明过的组件及其样式文件,无需再纠结文件体积过大.考虑到移动端的性能门槛,Mint UI 采用 CSS3 处理各种动效,避免浏览器进行不必要的重绘和重排,从而使用户获得流畅顺滑的体验.依托 Vue.js 高效的组件化方案,Mint UI 做到了轻量化.即使全部引入,压缩后的文件体积也仅有 ~30kb (JS + CSS

设置导航栏主题+iOS6 &amp; iOS7 适配

1 /** 2 * 设置导航栏按钮主题 3 */ 4 + (void)setupBarButtonItemTheme 5 { 6 UIBarButtonItem *item = [UIBarButtonItem appearance]; 7 8 // 设置背景 9 if (!iOS7) { 10 [item setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background"] forState:UIC

自定义导航栏图片 &amp; 适配 (类别)

#import "UINavigationBar+CustomImage.h" @implementation UINavigationBar (CustomImage) -(UIImage *)drawImage:(NSString *)imageName {          UIImage *image = [UIImageimageNamed:imageName];     CGSize ssySize = CGSizeMake(320, (IOS_VERSION_7)?64:

系统适配杂谈之一:ios7和ios8关于导航栏的那些事

ios7之前的版本中UIViewController中的view在显示后会自动调整为去掉导航栏的高度的,控件会自动在导航栏以下摆放. 在iOS7中UIViewController的wantsFullScreenLayout属性被舍弃了,所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的应用界面中的部分控件会被导航栏覆盖掉. 解决方案:可以使用ios7种UIViewController新增的属性extendLayoutIncludesOpaqueBar