iOS——UIPickerView选择器

UIPickerView

UIPickerView是 iOS 开发中常用的用户界面组件之一,用于在垂直方向上显示一个滚动的列表,用户可以通过滚动选择其中的一项。

UIPickerView的协议方法

UIPickerView和UItableView差不多,UIPickerView也要设置代理和数据源。UIPickerView的数据源和代理方法中:

objectivec 复制代码
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;// 设置UIPickerView的列数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;// 设置UIPickerView的行数

上面这两个方法是必须要实现的,其中前者负责设置UIPickerView的列数,后者负责设置行数。

其他协议方法:

objectivec 复制代码
// 设置PickerView第row行的选项标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
// 设置第component列第row行显示的视图
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
// 当选中第component列第row行的时候,就调用该方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
// 设置第component列的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
// 设置第component列的行高
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;

// 获取第component列第row行的视图,前提是该列必须是通过视图显示
- (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component;
// 刷新所有列的数据
- (void)reloadAllComponents;
// 刷新第component列的数据
- (void)reloadComponent:(NSInteger)component;
// 在PickerView里显示选中第component列第row的数据
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
// 获取第component列选中的行号
- (NSInteger)selectedRowInComponent:(NSInteger)component;

注意

  1. PickerView的高度iOS9之前不能改,默认216,即使修改了也还是216;在iOS9上设置高度为0,PickerView会不显示
  2. PickerView里面每行的高度可以改
  3. 系统自带的控件,数据源和代理属性不需要IBOutlet,也能拖线。自己定义的属性,想要拖线,必须写IBOutlet。

一个demo:

ViewController.h:

objectivec 复制代码
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>

@property (nonatomic, strong) UIPickerView *pickerView;
@property (nonatomic, copy) NSArray *myArray;
@property (nonatomic, copy) NSArray *chushiArr;
@property (nonatomic, copy) NSArray *juLiArr;
@property (nonatomic, copy) NSArray *caiPinArr;


@end

ViewController.m

objectivec 复制代码
#import "ViewController.h"

@interface ViewController () <UIPickerViewDelegate, UIPickerViewDataSource>


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.pickerView = [[UIPickerView alloc] init];
    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
    self.pickerView.frame = CGRectMake(0, 200, self.view.bounds.size.width, 500);
    self.chushiArr = @[@"销量最高", @"评分最高", @"价格最低", @"价格最高"];
    self.juLiArr = @[@"距离最近", @"距离最远"];
    self.caiPinArr = @[@"种类最多", @"销量最高", @"价格最低", @"价格最高"];
    self.myArray = self.chushiArr;
    [self.view addSubview:self.pickerView];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {
        return 3;
    }
    return [self.myArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    NSArray *xuanZe = @[@"厨师", @"距离", @"菜品"];
    if (component == 0) {
        return xuanZe[row];
    }
    return self.myArray[row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    if (component == 0) {
        if (row == 0) {
            self.myArray = self.chushiArr;
        } else if (row == 1) {
            self.myArray = self.juLiArr;
        } else if (row == 2) {
            self.myArray = self.caiPinArr;
        }
        [self.pickerView reloadComponent:1];
    }
}

@end

运行结果:

相关推荐
xingxing_F16 分钟前
Axure RP 11 for Mac 交互式原型设计软件
macos·ui·axure·photoshop
马拉萨的春天27 分钟前
iOS的动态库和静态库的差异区别以及静态库的好处
macos·ios·cocoa
肖老师xy32 分钟前
苹果(IOS)制作开发和发布证书
ios
马拉萨的春天2 小时前
探索Objective-C中的对象复制:深入理解copy和mutableCopy
开发语言·ios·objective-c
00后程序员张2 小时前
Fiddler使用教程,全面掌握Fiddler抓包工具的配置方法、代理设置与调试技巧(HTTPHTTPS全解析)
前端·测试工具·ios·小程序·fiddler·uni-app·webview
2501_916008892 小时前
HTTPS 下的 DDoS 防护与抓包分析实战,从检测到快速缓解的工程化打法
网络协议·ios·小程序·https·uni-app·iphone·ddos
2501_915918412 小时前
App 使用 HTTPS 的工程化实战,从接入到真机排查的一线指南
android·ios·小程序·https·uni-app·iphone·webview
hookserver3 小时前
企业微信ipad协议接口优势
http·ios·微信·企业微信·ipad·企微
xingxing_F5 小时前
Macs Fan Control Pro for Mac 电脑风扇控制软件
macos·电脑
Digitally6 小时前
如何从iPhone提取照片:2025年的6种方法
ios·iphone