文档章节

如何实现点击tabBar,让item改变图片,或者说是改变颜色

x
 xiaoluoling
发布于 2014/07/10 14:27
字数 554
阅读 47
收藏 1
//首先,要知道,往往想法是好的开始最关键的一步。对于这个小功能也是如此。当初我的想法就是,两张图片分别赋给UIButton,然后点击的时候,显示高亮的那张图片,可是最后做的都是无用功。

//这个小功能里,我的想法就是在自定义的tabBar视图上放五个UIButton,然后分别在这五个Button上面放五张有normal和highlight的图片上去,也就是十张图片。然后在按钮的点击事件中,让被选中的button显示高亮,其他的显示normal。 
废话不多说,直接上代码

#import "MainViewController.h"
#import "HomeViewController.h"
#import "MessageViewController.h"
#import "DiscoverViewController.h"
#import "ProfileViewController.h"
#import "MoreViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.tabBar.hidden = YES;
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self initViews];
    [self initTabBar];

}

- (void)initViews
{
    HomeViewController *home = [[HomeViewController alloc] init];
    MessageViewController *message = [[MessageViewController alloc] init];
    DiscoverViewController *discover = [[DiscoverViewController alloc] init];
    ProfileViewController *profile = [[ProfileViewController alloc] init];
    MoreViewController *more = [[MoreViewController alloc] init];
    
    NSArray *array = @[home,message,discover,profile,more];
    
    NSMutableArray *viewContrllerArray = [NSMutableArray arrayWithCapacity:5];
    for (int index = 0; index<array.count; index ++) {
        UINavigationController *baseNav = [[UINavigationController alloc] initWithRootViewController:array[index]];
        [viewContrllerArray addObject:baseNav];
        [baseNav release];
    }
    self.viewControllers = viewContrllerArray;
}

- (void)initTabBar
{
    _tabBarImage = [[UIView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].applicationFrame.size.height-49+20, 320, 40)];
    _tabBarImage.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tabbar_background@2x.png"]];
    [self.view addSubview:_tabBarImage];
    
    NSArray *backArray = @[@"tabbar_home@2x.png",@"tabbar_message_center@2x.png",@"tabbar_discover@2x.png",@"tabbar_profile@2x.png",@"tabbar_more@2x.png"];
    _highlightArray = @[@"tabbar_home_highlighted@2x.png",@"tabbar_message_center_highlighted@2x.png",@"tabbar_discover_highlighted@2x.png",@"tabbar_profile_selected@2x.png",@"tabbar_more_highlighted@2x.png"];
    
    for (int i = 0; i<backArray.count; i++) {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:backArray[i]] highlightedImage:[UIImage imageNamed:_highlightArray[i]]];
        imageView.frame = CGRectMake(0, 0, 30, 30);
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake((64-30)/2+(64*i), (49-30)/2, 30, 30);
        [button addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
        button.tag = i;
        [button addSubview:imageView];
        [imageView release];
        [_tabBarImage addSubview:button];
    }
    
    // 初始化时,将其设置为高亮
    UIButton *button = _tabBarImage.subviews[0];
    UIImageView *imageView = button.subviews[0];
    imageView.highlighted = YES;
}

// 点击图标的事件方法
- (void)clickAction:(UIButton *)button
{
    self.selectedIndex = button.tag;
    
    NSArray *array = _tabBarImage.subviews;
    for (UIButton *bt in array) {
        if (bt.tag == button.tag) {
            UIImageView *imageView = bt.subviews[0];
            imageView.highlighted = YES;
        } else {
            UIImageView *imageView = bt.subviews[0];
            imageView.highlighted = NO;
        }
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

@end


© 著作权归作者所有

x
粉丝 1
博文 3
码字总数 1522
作品 0
常州
程序员
私信 提问
自定义Tabbar,更加灵活的修改TabbarItem中的元素

我们之前实现利用Tabbar实现的分类管理,但是下面的图片的颜色和背景都不可以改变。我们虽然可以通过一些私有api进行改变,但是上不了app store。下面我自己完全自定义的一个Tabbar。实现...

鉴客
2012/01/10
11.5K
0
六、Flutter自定义Tabbar

目录 一、效果展示 二、底部Tabbar 三、顶部Tabbar 一、效果展示 底部Tabbar切换和顶部Tabbar切换在工作中使用频率都比较高,Flutter很人性化,这些组件都提供好了,我们只需要了解一下如何使...

星星编程
07/14
0
0
iOS学习之第二个View使用UITabBarViewController

前面有一篇博文iOS学习之Tab Bar的使用和视图切换 这是在AppDelegate里使用Tabbar,这样的程序打开就是TabbarView了,有时候我们需要给程序做一些帮助页面,或者登录页面,之后才跳转到tabba...

知行合一100
2012/06/28
0
0
UITabBarController的使用

1.UITabBarController UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的 container viewController中。 使用步骤: (1)初始化UITabBarController (2)设置U...

第四波
2016/04/27
203
0
iOS开发中的小技巧

01 - UITableView的Group样式下顶部空白处理 02 - UITableView的plain样式下,取消区头停滞效果 那个,其实,还是用Group样式吧哈哈。 03 - 获取某个view所在的控制器 04 - 两种方法删除NSU...

我是IT码农
2016/11/03
12
2

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部