环境配置和自定义tarbar

本文详细介绍了如何在iOS7环境下实现应用的界面定制,包括launchimage设置、状态栏管理、去除玻璃渲染、设置界面颜色及导航与tabbar控制器的使用。同时,通过实例展示了如何自定义tabbar控制器来实现不同界面的切换,并提供了代码实现细节。

Pasted Graphic 2.tiffIOS7里launchimage必须有568的图片

Pasted Graphic 1.tiff

// ios6显示状态栏

在单例里,appdelegate.m里:application.statusBarHidden = NO;


去除玻璃渲染:

Pasted Graphic 3.tiff

 

修改状态栏的颜色:在控制器里viewcontroller.m中:

-(UIStatusBarStyle)preferreStatusBarStyle

{

return UIStatusBarStyleLightContent;   //白色 

}

给界面设灰色:Pasted Graphic 4.tiff


状态栏一般交给application管理:

在info里添加属性Pasted Graphic 7.tiff

则不交给控制器管理上面所做无效,交给了application管理

// 设置状态栏的颜色

application.statusBarStyle = UIStatusBarStyleLightContent;

Classes文件夹,是虚拟的文件夹,在Finder建。appdelegate.m放倒Other文件夹里。

Pasted Graphic.tiff

修改索引的位置,build setting搜索pch,显示简介拷贝路径。


导航控制器导航标题一样,tabbar标题不一样。每个界面是一个tabbar,导航控制器是它的子控制器:

把storyboard的view删掉,拖一个tab bar controller删掉view controller,再拖navigation controller.右键view controller连接到navigation controller


table view controller删掉改为view controller,navigation controller的root view controller连接它们



选中tab bar controller底部tab bar item  设置image属性为相应图片,系统自带的tab bar 显示不了这个图片,图片填充整个tab bar item。自定义tab bar controller。


新建类ILTabBarViewController继承至UITabBarController放在main文件夹里;新建tab bar,ILTabBar 继承UIView放在main文件夹里。

选中tab bar controller Pasted Graphic 8.tiff,告诉系统该tab bar controller采取自定义的方式 


ILTabBarViewController.m


@interface ILTabBar()


@property (nonatomic, weak) UIButton *selectedButton;//默认uiview用weak


@end


- (void)viewDidLoad

{

    [super viewDidLoad];

    

    // 移除自带的tabBarremoveFromSuperview不会马上销毁,等该函数结束后才销毁,所以下面能tabBar.frame = self.tabBar.frame;

    [self.tabBar removeFromSuperview];

    

    NSLog(@"%@",self.tabBar);

    // 创建tabBar

    ILTabBar *tabBar = [[ILTabBar alloc] init];

    

    tabBar.delegate = self;

    

    tabBar.frame = self.tabBar.frame;

    

    [self.view addSubview:tabBar];

     

}


ILTabBar.m

- (void)addBtns

{

    

    NSString *imageName = nil;

    

    NSString *selImageName = nil;

    

    for (int i = 0; i < 5; i++) {

        ILTabBarButton *btn = [ILTabBarButton buttonWithType:UIButtonTypeCustom];

        // 绑定角标

        btn.tag = i;

        

        imageName = [NSString stringWithFormat:@"TabBar%d",i + 1];

        selImageName = [NSString stringWithFormat:@"TabBar%dSel",i + 1];

        

        // 设置按钮的图片

        [btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

        

        [btn setBackgroundImage:[UIImage imageNamed:selImageName] forState:UIControlStateSelected];

        

        // 监听按钮的点击

        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown]; //点击立即 upinside还等放开

        

        [self addSubview:btn];

        

        // 默认选中第一个按钮

        if (i == 0) {

            [self btnClick:btn];

        }

    }

}





- (void)layoutSubviews

{

    [super layoutSubviews];

    

    CGFloat btnW = self.bounds.size.width / self.subviews.count;

    CGFloat btnH = self.bounds.size.height;

    CGFloat btnX = 0;

    CGFloat btnY = 0;

    

    // 设置按钮的尺寸

    for (int i = 0; i < self.subviews.count; i++) {

        UIButton *btn = self.subviews[i];

        

        btnX = i * btnW;

        

        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);

    }


}



// 点击按钮的时候调用

- (void)btnClick:(UIButton *)button

{

    // 取消之前选择按钮

    _selectedButton.selected = NO;

    // 选中当前按钮

    button.selected = YES;

    // 记录当前选中按钮

    _selectedButton = button;

    

    // 切换控制器,通知ILTabBarViewController修改SelectedIndex

    if ([_delegate respondsToSelector:@selector(tabBar:didSelectedIndex:)]) {

        [_delegate tabBar:self didSelectedIndex:button.tag];

    }

   

}


取消高亮效果 自定义button,新建ILTabBarButton继承uibutton放在main文件夹里

ILTabBarButton.m里:

// 取消高亮状态

- (void)setHighlighted:(BOOL)highlighted

{


    

}


切换控制器:

1.用block

ILTabBar.h里:

// block作用:保存一段代码,到恰当的时候再去调用


// 如果需要传参数给其他对象,block才需要定义参数

typedef void(^ILTabBarBlock)(int selectedIndex);

@interface ILTabBar : UIView

//// 相当于小弟,定义block arccopy

@property (nonatomic, copy) ILTabBarBlock block;

@end



ILTabBarViewController.m里:

tabBar.block ^(int selectedIndex){

self.selectedindex = selectedIndex;

}


ILTabBar.m里:

btnClick:

if (_block) {    //防止默认选中0时,block 为nil导致运行报错

_block(button.tag);

}


2.用代理

ILTabBar.h里:

@class ILTabBar;


@protocol ILTabBarDelegate <NSObject>


@optional

- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index;


@end


@interface ILTabBar : UIView

@property (nonatomic, weak) id<ILTabBarDelegate> delegate;  //weak

@end



ILTabBarViewController.m里:


@interface ILTabBarViewController ()<ILTabBarDelegate>


@end

viewDidLoad里:tabBar.delegate = self;


// 代理方法

- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index

{

    self.selectedIndex = index;

}


ILTabBar.m里:

btnClick:

    // 切换控制器

    if ([_delegate respondsToSelector:@selector(tabBar:didSelectedIndex:)]) {

        [_delegate tabBar:self didSelectedIndex:button.tag];

    }


完善tarbar:

ILTabBarViewController.m里:


    NSString *imageName = nil;

    

    NSString *selImageName = nil;

    

    for (int i = 0; i < self.childViewControllers.count; i++) {

        

        imageName = [NSString stringWithFormat:@"TabBar%d",i + 1];

        selImageName = [NSString stringWithFormat:@"TabBar%dSel",i + 1];


        // 添加底部按钮

        [tabBar addTabBarButtonWithName:imageName selName:selImageName];

    

    }

ILTabBar.h里:

// 给外界创建按钮

- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName;

ILTabBar.m里:


// 提供一个方法给外界添加按钮

- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName

{

    // 创建按钮

    ILTabBarButton *btn = [ILTabBarButton buttonWithType:UIButtonTypeCustom];


    

    // 设置按钮的图片

    [btn setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal];

    

    [btn setBackgroundImage:[UIImage imageNamed:selName] forState:UIControlStateSelected];

    

    // 监听按钮的点击

    [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];

    

    [self addSubview:btn];

    

}


 btn.tag = i;

 if (i == 0) {

       [self btnClick:btn];

  }

放在layoutSubviews

ps:


layoutSubviews在以下情况下会被调用:

1init初始化不会触发layoutSubviews

2addSubview会触发layoutSubviews,addSubview所在函数结束后

3、设置viewFrame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值