IOS第11天(2:UIPickerView自定义国旗选择)

国旗选择

#import "HMViewController.h"
#import "HMFlag.h"
#import "HMFlagView.h"

@interface HMViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>

@property(nonatomic,strong)NSArray *flags;

@end

@implementation HMViewController

-(NSArray *)flags{
    if (_flags == nil) {
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"];
        NSArray *flagsArray = [NSArray arrayWithContentsOfFile:filePath];

        NSMutableArray *flagsM = [NSMutableArray array];

        for (NSDictionary *dict in flagsArray) {
            HMFlag *flag = [HMFlag flagWithDict:dict];
            [flagsM addObject:flag];
        }

        _flags = flagsM;

    }

    return _flags;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSLog(@"%@",self.flags);
}

#pragma mark -pickerView的数据源

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

    return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return self.flags.count;
}

//-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
//    HMFlag *flag =self.flags[row];
//    return flag.name;
//}

#pragma mark 通常用于自定pickerView的cellView
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
#warning 在ios7当中,view的可循环引用是用bug。

    HMFlag *flag =self.flags[row];
//    UILabel *label = [[UILabel alloc] init];
//    //自定义view的时候,设置x,y无效,所以不要做无用式
//    //label.frame = CGRectMake(10, 10, 200, 44);
//    label.bounds = CGRectMake(0, 0, 200, 44);
//    label.backgroundColor = [UIColor grayColor];
//    label.text = flag.name;
    HMFlagView *flagView = nil;

    //如果view不为空,代表有可循环使用的view
    if (view != nil) {
        flagView = (HMFlagView *)view;
    }else{
        flagView = [HMFlagView flagView];
    }

    //设置flagview的数据
    flagView.flag = flag;

    NSLog(@"%d %p",row,flagView);

    return flagView;
}

#pragma mark 设置picker里的第每一个view的高度
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    return 60;
}

*****HMFlagView.m

#import "HMFlagView.h"
#import "HMFlag.h"

@interface HMFlagView()
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation HMFlagView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

+(instancetype)flagView{
    return  [[[NSBundle mainBundle] loadNibNamed:@"HMFlagView" owner:nil options:nil] lastObject];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

-(void)setFlag:(HMFlag *)flag{
    _flag = flag;
    self.nameLabel.text = flag.name;
    self.imageView.image = [UIImage imageNamed:flag.icon];

}

@end

*****HMFlagView.h

#import <UIKit/UIKit.h>
@class HMFlag;
@interface HMFlagView : UIView

+(instancetype)flagView;
@property(nonatomic,strong)HMFlag *flag;

@end

***模型HMFlag.m

#import "HMFlag.h"

@implementation HMFlag

-(instancetype)initWithDict:(NSDictionary *)dict{

    if (self = [super init]) {
        [self setValuesForKeysWithDictionary:dict];
    }

    return self;
}
+(instancetype)flagWithDict:(NSDictionary *)dict{
    return [[self alloc] initWithDict:dict];
}
@end

***模型HMFlag.h

#import <Foundation/Foundation.h>

@interface HMFlag : NSObject

@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *icon;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)flagWithDict:(NSDictionary *)dict;

@end
时间: 2024-11-07 21:17:16

IOS第11天(2:UIPickerView自定义国旗选择)的相关文章

IOS第11天(3:UIPickerView省市联动)

********* #import "ViewController.h" #import "Province.h" @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate> @property (nonatomic,strong)NSArray *provinces; @property (nonatomic,assign)NSInteger indexOfProv

IOS第11天(1:UIPickerView点餐)

UIPickerView #import "ViewController.h" @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate> @property (nonatomic,strong)NSArray *foods; @property (weak, nonatomic) IBOutlet UILabel *fruitLabel; @property (weak, nonato

iOS.UIKit.11.UIPickerView

一.案例介绍:点击UIButton,将选中的省市信息显示在UILabel中,如图01,02 图01图02 二.案例步骤: 1.选择Simple View Aplication,取名cq.37.普通选择器,如图03 图03 2.Main.storyboard,如图04 3.provinces_cities.plist 4.CQ37ViewController.h #import <UIKit/UIKit.h> @interface CQ37ViewController : UIViewContr

IOS开发UI篇--UITableView的自定义布局==xib布局

利用Xib进行实现 应用场景:像团购网站的列表数据显示,新闻列表显示等(由于该类的显示的数据单元格内容格式相同) (1)主控制器文件,在文件中实现了自己自定义的代理,加载数据, 1 #import "SLViewController.h" 2 #import "SLTgDatas.h" 3 #import "SLTableViewCell.h" 4 #import "SLFooterView.h" 5 #import &quo

iOS开发UI篇—CAlayer(自定义layer)

iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的DrawRect:方法,然后在该方法中画图. 绘制图形的步骤: (1)获取上下文 (2)绘制图形 (3)渲染图形 如果在layer上画东西,与上面的过程类似. 代码示例: 新建一个类,让该类继承自CALayer YYMylayer.m文件 1 // 2 // YYMylayer.m 3 // 05-自定义l

IOS开发UI篇--UITableView的自定义布局==纯代码布局

UITableView中除了利用系统的UItableViewCell不能完成需求进行布局时,还可以进行自定义布局: 自定义布局分为两类:(1)利用代码进行创建 (2)利用xib进行实现: 下面对利用代码进行创建分析: 应用场景:像微博,等列表数据展示(由于微博的每个单元格的数据大小不一致,所以得计算每个单元格的大小) 分析:前提是获取列表数据,然后建立每个单元格的模型(建立单元格模型应继承UITableViewCell)复写 - (id)initWithStyle:(UITableViewCel

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文件控件tag值操作 数据模型部分: YYtg.h文件 // // YYtg.h // 01-团购数据显示(没有配套的类) // // Created by apple on 14-5-29. // Copyright (c) 2014年 itcase. All rights reserved. //

iOS开发 点菜系统 使用UIPickerView

利用UIPickerView实现一个简单的点菜界面,如下图所示.源码地址:https://github.com/xiaoLong1010/iOSAppDemo.git UIPickerView有两个协议UIPickerViewDataSource,UIPickerViewDelegate,它们为UIPickeView提供数据和代理.UIPickeView的三个component分别代表fruit,main,drink,选中某一行,菜名在下面显示.最上面的随机按钮,则实现随机点菜功能. 1.vie

iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结

iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结 项目中我们常见的自定义cell主要分为两种 等高cell:如应用列表.功能列表? 非等高cell:如微博列表.QQ聊天页面? 下面对这两类cell的创建方式简单记录各步骤. 等高Cell 等高cell通常有三种创建方式: storyboard自定义cell xib自定义cell 代码创建cell(使用frame计算/使用Autolayout布局) 下面分别记录每种创建步骤: 1. storyboard自定义cell 1.创建一个继