上篇文章实现了一个使用UIImageView\UILabel\UIButton实现一个综合的小的图片浏览器,虽然能实现功能,但是代码有很大的问题,这里进行第一次改进:将代码中重复性的代码进行封装,封装成一个方法,用用户点击按钮时,调用点击按钮的响应方法,这个方法中直接调用封装的这个方法.
下面直接上代码,storyboard拖线跟上篇一样,这里不再重复
ViewController.m
1 // 2 // ViewController.m 3 // 01-图片浏览器1 4 // 5 // Created by hukezhu on 15/5/12. 6 // 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 /** 界面上最上面显示索引的label*/ 13 @property (weak, nonatomic) IBOutlet UILabel *noLabel; 14 /** 显示图片的控件*/ 15 @property (weak, nonatomic) IBOutlet UIImageView *iconView; 16 /** 描述图片内容的label*/ 17 @property (weak, nonatomic) IBOutlet UILabel *descLabel; 18 /** 19 * 左边按钮的属性,用来控制按钮的不可用状态 20 */ 21 @property (weak, nonatomic) IBOutlet UIButton *left; 22 /** 23 * 右边按钮的属性,用来控制按钮的不可用状态 24 */ 25 @property (weak, nonatomic) IBOutlet UIButton *right; 26 /** 27 * 索引,记录位置 28 */ 29 @property (nonatomic ,assign)int index; 30 /** 31 * 上一张的点击响应方法 32 */ 33 - (IBAction)previous; 34 /** 35 * 下一张的点击响应方法 36 */ 37 - (IBAction)next; 38 @end 39 40 @implementation ViewController 41 42 - (void)viewDidLoad { 43 [super viewDidLoad]; 44 45 //首先将当前计数器设置为-1,然后再调用next方法,即可显示首页面. 46 self.index = -1; 47 [self next]; 48 } 49 //发现代码中previous和next方法中的代码基本上一样,属于重复性的,可以将其封装成一个方法 50 51 - (void)move{ 52 53 switch (self.index) { 54 case 0: 55 self.noLabel.text = @"1/5"; 56 self.iconView.image = [UIImage imageNamed:@"biaoqingdi"]; 57 self.descLabel.text = @"哥牛逼啊"; 58 break; 59 case 1: 60 self.noLabel.text = @"2/5"; 61 self.iconView.image = [UIImage imageNamed:@"bingli"]; 62 self.descLabel.text = @"亮瞎眼啊"; 63 break; 64 case 2: 65 self.noLabel.text = @"3/5"; 66 self.iconView.image = [UIImage imageNamed:@"chiniupa"]; 67 self.descLabel.text = @"小姑娘吃牛排比杀牛还费劲"; 68 break; 69 case 3: 70 self.noLabel.text = @"4/5"; 71 self.iconView.image = [UIImage imageNamed:@"danteng"]; 72 self.descLabel.text = @"蛋疼"; 73 break; 74 case 4: 75 self.noLabel.text = @"5/5"; 76 self.iconView.image = [UIImage imageNamed:@"wangba"]; 77 self.descLabel.text = @"王八"; 78 break; 79 80 } 81 //设置按钮的不可用状态,当计数器为0时,左边的按钮为不可用状态 82 self.left.enabled = self.index != 0; 83 //当计数器为4时,右边的按钮为不可用状态 84 self.right.enabled = self.index != 4; 85 } 86 - (IBAction)previous{ 87 88 //计数器减一 89 self.index--; 90 [self move]; 91 } 92 - (IBAction)next{ 93 self.index++; 94 [self move]; 95 } 96 @end
这段代码中,将实现选择的那段代码,封装成了一个move方法,使用的时候直接调用这个move方法即可.代码比较简单,不再重复了.
分析代码,还是有些问题,我们数据直接写在了move方法中,这种方法不太好,分析数据,发现每个switch选项中,序号设置这一项可以提取出来,而剩下的两个数据可以使用字典来存储,下篇文章,我会再次改进这个代码,将数据存储到字典中.