[iOS]中 UIPickerView 文字居中

1,908 阅读2分钟

想必大家工作中用到 pickerView 的时候,都是点击 UITextFeild 的时候,从底部弹出一个 pickerView。你有没有用过不是代替键盘从底部弹出的 pickerView?

就像这样的:当然,demo在这里。

JPPickerView.gif

如果你想快速的掌握,请跟着我的思路往下看。

第一步:初始化一个 PickerView让PickerView 在自定义的容器中按照我们想要的 frame 填充。

  • 创建一个 UIView 的子类 JPPickerView,在该类的构造方法中传入一个要在 pickerView 中展示的数组 arr
-(instancetype)initWithArr:(NSArray<NSString *> *)arr{
    if (self = [super init]) {
    self.arr = arr;
    // 初始化UIPickerView
    [self setUp];
    }
    return self;
}
  • 同时在该构造方法中初始化一个 UIPickerView。如果你要自定义 PickerViewframe,下面这四行代码你直接拷过去就可以了,强调一下,只能这么写。
-(void)setUp{
    // **********************************************************************************************
    // 这四行代码至关重要,意思是,在当前View的左上角远点创建一个pickView, 让pickView的左右上下自由伸缩
    // 如果不这么设置,你下面设置的frame就没有效果,不信自己注掉试试看
    UIPickerView *pickView = [[UIPickerView alloc]initWithFrame:CGRectZero];
    pickView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    pickView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
    pickView.showsSelectionIndicator = YES;
    // **********************************************************************************************

    pickView.dataSource = self;
    pickView.delegate = self;
    self.pickView = pickView;
    pickView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    [self addSubview:pickView];
}

第二步:让要显示的文字居中

  • 这里使用 UILabel 来展示要显示的文字,你可以利用 UILabeltextAlignment 属性来设置文字的对齐模式。同时,这样还能应付那些,比如说,女性用的 APP 里要将文字定义为粉色,等这样的特殊要求,此时你使用 UILabelattributedText 属性就可以实现这个功能。你如果想要自定义字体样式,可以参见我以前的文章
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    // 这里用label来展示要显示的文字, 然后可以用label的textAlignment来设置文字的对齐模式
    UILabel *myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 35)];
    myView.font = [UIFont systemFontOfSize:18];
    myView.backgroundColor = [UIColor clearColor];
    myView.textAlignment = NSTextAlignmentCenter;
    myView.text = self.arr[row];
    return myView;
}

NewPan 的文章集合

下面这个链接是我所有文章的一个集合目录。这些文章凡是涉及实现的,每篇文章中都有 Github 地址,Github 上都有源码。

NewPan 的文章集合索引

如果你有问题,除了在文章最后留言,还可以在微博 @盼盼_HKbuy 上给我留言,以及访问我的 Github