美文网首页UI基础
国家选择器(UIPickView的基本使用)

国家选择器(UIPickView的基本使用)

作者: 952625a28d0d | 来源:发表于2016-03-16 16:07 被阅读492次
    • 创建数据模型
    • 基本控件
    • 自定义视图

    数据模型

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}
    
    #import <Foundation/Foundation.h>
    
    @interface CountryModel : NSObject
    
    @property(nonatomic, copy) NSString * name;
    @property(nonatomic, copy) NSString * icon;
    
    - (instancetype)initWithDictionary:(NSDictionary *)dict;
    + (instancetype)CountryWithDictionary:(NSDictionary *)dict;
    
    @end```
    
    

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}

    import "CountryModel.h"

    @implementation CountryModel

    • (instancetype)initWithDictionary:(NSDictionary *)dict{
      if (self = [super init]) {
      [self setValuesForKeysWithDictionary:dict];
      }
      return self;
      }
    • (instancetype)CountryWithDictionary:(NSDictionary *)dict{
      return [[self alloc] initWithDictionary:dict];
      }

    @end```

    视图

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f8187}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s6 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}span.s7 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4f8187}
    
    #import <UIKit/UIKit.h>
    
    @class CountryModel;    // 防止循环声明
    
    @interface CountryFlagView : UIView
    
    @property (weak, nonatomic) IBOutlet UILabel *name;
    @property (weak, nonatomic) IBOutlet UIImageView *countryImage;
    
    @property(nonatomic, strong) CountryModel * model;
    
    + (instancetype)makeCountryView;
    
    + (CGFloat)heightRow;
    
    @end```
    
    

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f8187}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #008400}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s7 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s8 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s9 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

    import "CountryFlagView.h"

    import "CountryModel.h"

    @implementation CountryFlagView

    • (instancetype)makeCountryView{
      return [[[NSBundle mainBundle] loadNibNamed:@"CountryFlagView" owner:self options:nil] lastObject];
      }
    • (void)setModel:(CountryModel *)model{
      if (_model != model) {
      _model = model;
      self.name.text = _model.name;
      self.countryImage.image = [UIImage imageNamed:_model.icon];
      }
      }
    • (CGFloat)heightRow{
      return 54;
      }

    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.

    • (void)drawRect:(CGRect)rect {
      // Drawing code
      }
      */

    @end```

    调用

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #008400}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #78492a}p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s7 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s8 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s9 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s10 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s11 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
    
    #import "ViewController.h"
    #import "CountryModel.h"
    #import "CountryFlagView.h"
    
    @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
    
    @property(nonatomic, strong) NSArray * dataArray;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    #pragma mark - 懒加载获取Plist数据
    - (NSArray *)dataArray{
        if (!_dataArray) {
            NSString *path = [[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"];
            NSArray *array = [NSArray arrayWithContentsOfFile:path];
            NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:array.count];
            for (NSDictionary *dict in array) {
                CountryModel *model = [[CountryModel alloc] initWithDictionary:dict];
                [mutableArray addObject:model];
            }
            _dataArray = [mutableArray copy];
        }
        return _dataArray;
    }
    
    #pragma mark - pickViewDataSourcre Delegate
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
        return 1;
    }
    
    // returns the # of rows in each component..
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
        return self.dataArray.count;
    }
    
    #pragma mark pickView Delegate
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
        CountryFlagView *countryFlagView = (CountryFlagView *)view;
        if (!countryFlagView) {
            countryFlagView = [CountryFlagView makeCountryView];
        }
        countryFlagView.model = self.dataArray[row];
        return countryFlagView;
    }
    
    - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
        return [CountryFlagView heightRow];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end```
    
    ###效果
    
    ![country.gif](http:https://img.haomeiwen.com/i189984/cb477c998f30aefb.gif?imageMogr2/auto-orient/strip)

    相关文章

      网友评论

        本文标题:国家选择器(UIPickView的基本使用)

        本文链接:https://www.haomeiwen.com/subject/pziqlttx.html