`
iaiai
  • 浏览: 2195699 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS-快速自定义UITabBarController内的tabbar控件

 
阅读更多
我们都知道在IOS7之前,Xcode中自带的UITabBarController控制器的tabbar样子很难看,可有时又想利用UITabBarController来快速切换界面,这样就牵扯到要自定义其中的tabbar。那么,如何才能自定义一个tabbar,拥有与QQ或者新浪微博那样好看的界面呢?

如上图中,我们的目标是自定义tabbar做成图中下方的样子,这样点击下方,以快速切换界面。

具体代码如下:
在GXViewController的.m文件中
#import "GXViewController.h"
#import "GXCustomButton.h"

@interface GXViewController (){
    UIImageView *_tabBarView; //自定义的覆盖原先的tarbar的控件
    
    GXCustomButton *_previousBtn; //记录前一次选中的按钮
}

@end

@implementation GXViewController

- (void)viewDidLoad{
    [super viewDidLoad];
    
    self.tabBar.hidden = YES; //隐藏原先的tabBar
    CGFloat tabBarViewY = self.view.frame.size.height - 49;
    
    _tabBarView = [[UIImageView alloc] initWithFrame:CGRectMake(0, tabBarViewY, 320, 49)];
    _tabBarView.userInteractionEnabled = YES; //这一步一定要设置为YES,否则不能和用户交互
    _tabBarView.image = [UIImage imageNamed:@"背景图片"];
    
    [self.view addSubview:_tabBarView];
    
    // 下面的方法是调用自定义的生成按钮的方法
    [self creatButtonWithNormalName:@"图片1"andSelectName:@"图片2"andTitle:@"消息"andIndex:0];
    [self creatButtonWithNormalName:@"图片3"andSelectName:@"图片4"andTitle:@"联系人"andIndex:1];
    [self creatButtonWithNormalName:@"图片5"andSelectName:@"图片6"andTitle:@"动态"andIndex:2];
    [self creatButtonWithNormalName:@"图片7"andSelectName:@"图片8"andTitle:@"设置"andIndex:3];
    
    GXCustomButton *btn = _tabBarView.subviews[0];
    
    [self changeViewController:btn]; //自定义的控件中的按钮被点击了调用的方法,默认进入界面就选中第一个按钮
}

#pragma mark 创建一个按钮
- (void)creatButtonWithNormalName:(NSString *)normal andSelectName:(NSString *)selected andTitle:(NSString *)title andIndex:(int)index{
    /*
     GXCustomButton是自定义的一个继承自UIButton的类,自定义该类的目的是因为系统自带的Button可以设置image和title属性,但是默认的image是在title的左边,若想想上面图片中那样,将image放在title的上面,就需要自定义Button,设置一些东西。(具体GXCustomButton设置了什么,放在下面讲)
     */
    
    GXCustomButton *button = [GXCustomButton buttonWithType:UIButtonTypeCustom];
    button.tag = index;
    
    CGFloat buttonW = _tabBarView.frame.size.width / 4;
    CGFloat buttonH = _tabBarView.frame.size.height;
    button.frame = CGRectMake(80 *index, 0, buttonW, buttonH);
    
    [button setImage:[UIImage imageNamed:normal] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:selected] forState:UIControlStateDisabled];
    [button setTitle:title forState:UIControlStateNormal];
    
    [button addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventTouchDown];
    
    button.imageView.contentMode = UIViewContentModeCenter; // 让图片在按钮内居中
    button.titleLabel.textAlignment = NSTextAlignmentCenter; // 让标题在按钮内居中
    button.font = [UIFont systemFontOfSize:12]; // 设置标题的字体大小
    
    [_tabBarView addSubview:button];
}

#pragma mark 按钮被点击时调用
- (void)changeViewController:(GXCustomButton *)sender{
    self.selectedIndex = sender.tag; //切换不同控制器的界面
    sender.enabled = NO;
    
    if (_previousBtn != sender) {
        _previousBtn.enabled = YES;
    }
    _previousBtn = sender;
    
}

@end


自定义的GXCustomButton按钮.m中的代码如下:
#import "GXCustomButton.h"
@implementation GXCustomButton

#pragma mark 设置Button内部的image的范围
- (CGRect)imageRectForContentRect:(CGRect)contentRect{
    CGFloat imageW = contentRect.size.width;
    CGFloat imageH = contentRect.size.height * 0.6;
    
    return CGRectMake(0, 0, imageW, imageH);
}

#pragma mark 设置Button内部的title的范围
- (CGRect)titleRectForContentRect:(CGRect)contentRect{
    CGFloat titleY = contentRect.size.height *0.6;
    CGFloat titleW = contentRect.size.width;
    CGFloat titleH = contentRect.size.height - titleY;
    
    return CGRectMake(0, titleY, titleW, titleH);
}

@end

经过以上代码,就完成了快速自定义UITabBarController内的tabbar控件的目标。

如有任何疑问,欢迎各位留言沟通。
  • 大小: 18.8 KB
分享到:
评论
1 楼 bewithme 2015-05-02  
1.定义一个GXViewController类继承自UITabBarController

我从头到尾就没有看到继承

相关推荐

    ios-自定义弧形tabBar,tabbar点击水波纹动画,及其UIwebView中oc和js相互调用示例.zip

    - iOS的系统TabBar是矩形的,但通过自定义`UITabBarController`或创建一个自定义`UIView`,我们可以实现弧形的TabBar设计。这通常涉及到重写`layoutSubviews`方法,计算每个item的中心点,并根据弧度调整它们的位置...

    ios-IrregularTabBar自定义tabBar.zip

    在iOS开发中,自定义TabBar是一个常见的需求,特别是在追求个性化和用户体验提升的应用中。"ios-IrregularTabBar自定义tabBar.zip"这个压缩包提供了一个解决方案,它旨在创建一个具有独特交互效果的TabBar,能够对...

    ios-自定义的TabBar.zip

    1. **UITabBarController**:这是iOS SDK提供的一种默认的TabBar实现,但它的样式和功能可能无法满足所有设计需求。自定义TabBar通常需要对这个类进行扩展或替换。 2. **UIAppearance**:这是苹果提供的一个协议,...

    ios-自定义tabbar主框架.zip

    总的来说,自定义TabBar的主框架涉及的知识点包括:iOS UI设计,自定义控件,事件处理,布局管理,动画设计,以及用户交互设计等。开发者需要具备扎实的Swift或Objective-C编程基础,熟悉UIKit框架,并了解Apple的人...

    ios-模仿简书自定义TabBar(纯代码).zip

    在iOS应用开发中,自定义TabBar是一种常见的需求,它能提供更加个性化和与品牌相符的用户体验。本项目“ios-模仿简书自定义TabBar(纯代码)”旨在实现一个与简书APP类似的TabBar组件,允许开发者方便地集成到自己的...

    ios-自定义tabBar.zip

    在iOS应用开发中,自定义TabBar是一种常见的需求,它能提供更为个性化和灵活的用户界面。本项目“ios-自定义tabBar.zip”显然旨在教你如何创建一个可以上下联动的导航栏,这种功能常见于许多App中,用于增强用户体验...

    ios-自定义tabbar,cell自适应.zip

    在这个项目中,开发者创建了一个自定义的TabBar控件,并实现了UITableViewCell的高度自适应。下面将详细介绍这两个关键点。 **自定义TabBar** 在iOS开发中,TabBar是应用底部的标准导航元素,通常由...

    ios-自定义TabBar可以随意添加数值标.zip

    在iOS开发中,自定义TabBar是一个常见的需求,它允许开发者根据应用的特性和设计风格创建独特的用户界面。本教程将深入讲解如何通过纯代码方式实现一个可自定义的TabBar,让你能够自由地调整其属性,以满足个性化的...

    ios-自定义tabbar -------首页tableview 仿qq侧滑菜单.zip

    在iOS应用开发中,自定义TabBar是一种常见的需求,它能提供更加个性化和独特的用户体验。本文将深入探讨如何实现一个自定义的TabBar,并结合首页TableView实现类似QQ侧滑菜单的效果。这一技术栈主要涉及iOS UI设计、...

    ios-自定义TabBar(OC、Swift).zip

    如果你需要更复杂的自定义,比如添加额外的UI元素或动画效果,可以创建一个自定义的`UITabBarController`子类,并重写`layoutSubviews`方法来绘制自定义的TabBar。 1. Objective-C: ```objc - (void)...

    IOS自适应的可定制的TabBar 控件

    本篇文章将详细讲解一个自适应且可定制的iOS TabBar控件,它能够帮助开发者创建出更加符合用户需求和设计风格的TabBar。 标题中的“IOS自适应的可定制的TabBar 控件”指的是一个专门针对iOS平台的TabBar实现,该...

    swift-这是一个自定义的TabBar样式实现TabBar中间凸起“”按钮

    在iOS应用开发中,UI设计和用户体验是至关重要的部分,其中TabBar作为导航控制器的常见组件,用于在多个视图间切换。自定义TabBar可以让开发者根据应用需求创建独特且吸引人的界面。本文将深入探讨如何使用Swift语言...

    ios-一句代码调用,自定义tabbar.zip

    在iOS应用开发中,TabBarController是用户界面设计中常见的组件之一,它允许用户通过底部的...通过这个"ios-一句代码调用,自定义tabbar.zip"资源,开发者可以快速实现美观且独特的TabBar,提升应用的整体用户体验。

    ios-映客tabBar.zip

    在iOS开发中,"不规则tabBar"通常指的是与苹果默认设计不同的自定义TabBar控件。TabBar是iOS应用中常见的导航元素,用于在多个视图之间切换,但有时开发者为了实现独特的用户界面或者品牌风格,会创建具有独特设计的...

    swift-LCTabBar自定义tabbar样式中间凸起按钮可以为3个或者5个tab栏

    在Swift开发中,UI设计是至关重要的部分,而TabBar作为iOS应用中常见的导航组件,它的自定义风格能显著提升用户体验。本知识点主要探讨如何使用`LCTabBar`实现一个自定义的TabBar,其特色在于中间按钮可以凸起,并且...

    ios源码之自定义TabBar通知.rar

    - `UIAppearance`协议允许我们在整个应用程序范围内统一设置控件的外观,包括TabBar和TabBarItem。 - 通过`[[UITabBar appearance] setTintColor:]`等方法,可以在不改变TabBar代码结构的情况下实现全局的风格调整...

    ios-仿今日头条制作的tabBar导航(带夜间模式).zip

    总之,这个项目涉及到了iOS应用开发中的多种技术,包括自定义控件、动画、状态管理、网络数据同步以及用户界面设计。通过这样的实践,开发者可以深入理解 iOS UI 设计和交互逻辑,提升自己的开发技能。

    ios-MVC项目框架,自定义tabbar,自定义导航栏,仿微博弹出,启动广告.zip

    自定义TabBar可以通过继承`UITabBarController`或创建自定义控件实现,涉及到的关键技术包括`UITabBarItem`的定制、自定义图片和文字、以及响应用户点击事件。 3. 自定义NavigationController: 自定义...

    iOS 自定义TabBar

    在iOS的UIKit框架中,`UITabBarController`提供了默认的TabBar实现,但有时为了满足特定的设计需求或增加独特的交互效果,我们需要对其进行自定义。这通常涉及到以下几个步骤: 1. **创建自定义TabBarItem**: ...

    swift-在系统UITabBarController的基础上实现安卓版微信TabBar的滑动切换功能

    在iOS应用开发中,我们经常需要使用到`UITabBarController`来实现底部导航栏的功能,类似于安卓版微信的TabBar。然而,原生的`UITabBarController`并未提供滑动切换子控制器的功能,而是通过点击TabBar上的按钮来...

Global site tag (gtag.js) - Google Analytics