基础控件使用实例-图片浏览器(UILabel、UIButton、UIImageView及plist)

(1)UILabel的基本设置

要想让UILabel自动换行,设置Lines为0即可




(2)UIButton的状态及与UIImageView的异同

1.UIButton
normal(普通状态)
默认情况
对应的枚举常量:UIControlStateNormal


highlighted(高亮状态)
按钮被按下去的时候(手指还未松开)
对应的枚举常量:UIControlStateHighlighted


disabled(失效状态,不可用状态)
如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
对应的枚举常量:UIControlStateDisabled


相同点:都能显示图片

2.异同:
不同点
UIButton默认情况就能监听点击事件,而UIImageView默认情况下不能
UIButton可以在不同状态下显示不同的图片
UIButton既能显示文字,又能显示图片


如何选择
UIButton:需要显示图片,点击图片后需要做一些特定的操作
UIImageView:仅仅需要显示图片,点击图片后不需要做任何事情

(3)NSArray和NSDictionary的使用

当图片内容非常多时,“根据index来设置内容”的代码就不具备扩展性,要经常改动


为了改变现状,可以考虑讲图片数据线保存到一个数组中,数组中有序地放着很多字典,一个字典代表一张图片数据,包含了图片名、图片描述
@property (strong, nonatomic) NSArray *images;


由于只需要初始化一次图片数据,因此放在get方法中初始化


将属性放在get方法中初始化的方式,称为“懒加载”\”延迟加载”

(4)Plist文件

什么是plist文件
直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低


因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码


一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist,因此也成为“Plist文件”
创建Plist文件

解析Plist文件
接下来通过代码来解析Plist文件中的数据
获得Plist文件的全路径
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];


加载plist文件
_images = [NSArray arrayWithContentsOfFile:path];


- (NSArray *)images
{
    if (_images == nil) {
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];
        _images = [NSArray arrayWithContentsOfFile:path];
    }
    return _images;
}
Plist文件的解析过程

(5)项目实现

1..plist文件

2.代码
#define MJIconKey @"icon"
#define MJDescKey @"desc"

#import "MJViewController.h"

@interface MJViewController ()
- (IBAction)previous;
- (IBAction)next;
@property (weak, nonatomic) IBOutlet UIButton *previousBtn;
@property (weak, nonatomic) IBOutlet UIButton *nextBtn;

@property (weak, nonatomic) IBOutlet UILabel *noLabel;
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (weak, nonatomic) IBOutlet UILabel *descLabel;

// 记录当前显示的是第几张图片
@property (nonatomic, assign) int index;

// 图片数据集合
@property (nonatomic, strong) NSArray *imageData;
@end

@implementation MJViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 默认显示index为0对应的数据
    [self changeData];
}

- (NSArray *)imageData
{
    if (_imageData == nil) { // 从未初始化
        // 初始化数据
        // File : 全路径
        // NSBundle : 一个NSBundle代表一个文件夹

        // 利用mainBundle就可以访问软件资源包中的任何资源
        NSBundle *bundle = [NSBundle mainBundle];
        
        //  获得imageData.plist的全路径
        NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];
        
        _imageData = [NSArray arrayWithContentsOfFile:path];
    }
    return _imageData;
}

#pragma mark 改变数据
- (void)changeData
{
    // 1.改变数据
    self.noLabel.text = [NSString stringWithFormat:@"%d/%d", self.index + 1, self.imageData.count];
    
    // 2.取出index对应的字典数据
    NSDictionary *imageDict = self.imageData[self.index];
    
    // 3.设置图片
    self.iconView.image = [UIImage imageNamed:imageDict[MJIconKey]];
    
    // 4.设置描述
    self.descLabel.text = imageDict[MJDescKey];
    
    // 5.改变按钮状态
    self.previousBtn.enabled = (self.index != 0);
    self.nextBtn.enabled = (self.index != self.imageData.count - 1);
}

#pragma mark 上一张
- (IBAction)previous {
    // 1.减小索引
    self.index--;
    
    // 2.改变数据
    [self changeData];
}

#pragma mark 下一张
- (IBAction)next {
    // 1.增加索引
    self.index++;
    
    // 2.根据索引显示对应的内容
    [self changeData];
}
@end

4.运行结果



补充:UI控件常见设置

UILabel的常见设置
@property(nonatomic,copy)   NSString           *text; 
显示的文字


@property(nonatomic,retain) UIFont             *font; 
字体


@property(nonatomic,retain) UIColor            *textColor; 
文字颜色


@property(nonatomic)        NSTextAlignment    textAlignment; 
对齐模式(比如左对齐、居中对齐、右对齐) 
UIFont代表字体,常见创建方法有以下几个:
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize;   系统默认字体
+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize;  粗体
+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize;  斜体

UIButton的常见设置

- (void)setTitle:(NSString *)title forState:(UIControlState)state;
设置按钮的文字


- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
设置按钮的文字颜色


- (void)setImage:(UIImage *)image forState:(UIControlState)state; 
设置按钮内部的小图片


- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
设置按钮的背景图片


设置按钮的文字字体(需要拿到按钮内部的label来设置)
btn.titleLabel.font = [UIFont systemFontOfSize:13];
- (NSString *)titleForState:(UIControlState)state; 
获得按钮的文字


- (UIColor *)titleColorForState:(UIControlState)state;
获得按钮的文字颜色


- (UIImage *)imageForState:(UIControlState)state;
获得按钮内部的小图片


- (UIImage *)backgroundImageForState:(UIControlState)state;
获得按钮的背景图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值