今天的内容不多,主要是对UIButton的一个深入了解,用代码做一个UIButton 和利用之前的知识点做一个模拟购物车的一个demo
UIButton
类型
UIButton的类型有很多,默认情况下的类型是system,最常用的是custom(凡是添加图片的UIButton都是custom),detail disclosure,info light,info dark (最右三种其实类型是差不多的,都是信息提示的按钮,都不可以改变尺寸)add contact (图标为”+”按键),今天主要讲custom状态
UIButton有5种状态,这里先讲3种,一种是Default 也称之为普通状态,即该状态是没有对按钮进行任何操作的状态.第二种是Highlighted 也称之为高亮状态,指的是监听到按键被按下去后还没松手时的状态.最后一种是Enabled/Disabled 代表按键状态是否能够按下去
用代码实现创建UIButton并监听按下的动作 demo 核心代码如下:
-(void)button{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
/*
创建UIButton对象并初始化类型,设置按钮的类型只能在初始化的时候,因为该属性为readonly
*/
button.frame = CGRectMake(100, 100, 150, 80);
[button setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"player_btn_pause_normal"] forState:UIControlStateNormal];
[self.view addSubview:button];
[button setTitle:@"暂停" forState:UIControlStateNormal];
/*
设置背景图片 设置按钮普通 设置按钮的文字时一定要用set方法,因为所有属性均为只读
*/
[button addTarget:self action:@selector(monitor) forControlEvents:UIControlEventTouchUpInside ];
// 监听按钮按下去的动作 并调用monitor方法
[button setTitle:@"播放" forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"player_btn_play_normal"] forState:UIControlStateHighlighted];
}
-(void)monitor{
NSLog(@"%s",__func__);
}
效果如下:
按下去后会调用monitor方法
按下去不松手可以看到背景颜色 按钮图片 还有文字的改变
综合练习
模拟购物车的一个demo 综合了UIImage..一个九宫格摆列布局的算法
核心代码如下:
-(void)commodityView{
NSInteger cowCount = 3;
// 总行数
CGFloat width = 80;
CGFloat height = 100;
//设置商品View(图片+文字)的宽高
NSInteger index = self.ShopCarView.subviews.count;
//设置商品的个数
NSInteger hGap = (self.ShopCarView.frame.size.width - cowCount * width) / (cowCount - 1);
//水平间距
NSInteger vGap = self.ShopCarView.frame.size.height - 2 * height;
//垂直间距
CGFloat x = (index % cowCount) * (width + hGap);
CGFloat y = (index / cowCount) * (height + vGap);
//设置商品的位置
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(x, y, width, height)];
//创建商品的View并初始化上面设置的数据
view.backgroundColor = [UIColor redColor];
[self.ShopCarView addSubview:view];
}
- (IBAction)addButton:(UIButton *)sender {
[self commodityView];
self.deleteButoon.enabled = YES;
//只要添加了商品就打开删除键的使能
sender.enabled = (self.ShopCarView.subviews.count != 6);
// 只要商品的数充满了购物车的容量就关闭添加键的使能
}
- (IBAction)deleteButton:(UIButton *)sender {
UIView *view = [self.ShopCarView.subviews lastObject];
[view removeFromSuperview];
//删除最后一个商品
self.addButton.enabled = YES;
//只要删除就打开添加键的使能
sender.enabled = (self.ShopCarView.subviews.count != 0);
//没有商品了就关闭删除键的使能
}
截图如下:
没商品时,无法删除东西
有商品时但没满,可以删除可以添加
购物车满时,无法添加东西
关于九宫格算法的
其实就是把整个父控件的宽度 - (列数*子控件的宽度) / (列数 -1 )的
得出水平间距
所以位置的X值就是(子控件个数 % 总个数) 再乘以 子控件的宽度 + 水平间距
垂直间距等于 父控件的高度 - (总行数 * 子控件的高度) / (行数 - 1)
位置的Y值 是 (子控件个数 / 总个数) 再乘以 子控件的宽度 + 垂直间距