環境配置和自定義tarbar

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事件



發佈了38 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章