欢迎来到 IT实训基地-南通科迅教育
咨询电话:0513-81107100
ios 构建含有多个滚轮的表格
2017/3/11
南通科迅教育
452
南通IT培训学校哪里好

有时用户需要从一份很长的列表中选择某个条目,或是需要同时从多份列表中分别做出选择。UIPickerView实例很适合这些情况下。UIPickerVIew对象制作出的表格提供了很多各自独立的滚轮。用户可以通过操作这些滚轮来做出选择

他们使用的独特的数据源协议和委托协议:

1、没有UIPickerViewController类。UIPickerView实例扮演其他视图的子视图。在应用程序里,它们并不打算成为视图的中心焦点。开发者可以把UIPickerView实例放在另一个视图里面。

2、UIPickerView采用数字而非对象来表示其中的滚轮。UIPickerView里的组件是用数字来编号的,而不与NSIndexPath实力相对应。这个类不像UITableVIew那样严整。

在实现数据源协议时,开发者可以提供字符串,也可以提供视图。这两种方式UIPickerView都能处理。

1、创建UIPickerView

创建选取器的时候,别忘了设置delegate与dataSource。如果不这样做,那么就无法向视图里添加数据、无法定义其特性,也无法响应用户所做的选择。主视图控制器应该实现UIPickerViewDelegate与UIPickerViewDataSource协议

2、数据源方法与委托方法

为了使UIPickerView具备最基本的功能,需要实现三个关键的数据源方法:

1、numberOfComponentsInPickerView:——该方法返回视图里的列数,其返回值是个整数。

2、pickerVIew:numberOfRowsInComponent:——该方法返回每个滚轮所具备的行数,其返回值是个整数。滚轮的行数不一定都要相同。其中一个滚轮可以有很多行,而另外一个滚轮则可以只有几行。

3、pickerVIew:titleForRow:forComponent:或pickerView:viewForRow:forComponent:reusingView:——这两个方法可以为滚轮中的某一行指定文本或视图,以便用作该行的标签。

3、主要代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
- (void)viewDidLoad {
    [superviewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0,100, self.view.frame.size.width,200)];
    [self.view addSubview:picker];
    picker.delegate = self;
    picker.dataSource = self;
    picker.showsSelectionIndicator = YES;
     
    [picker selectRow:5000+ (rand() %4) inComponent:0animated:YES];
    [picker selectRow:5000+ (rand() %4) inComponent:1animated:YES];
    [picker selectRow:5000+ (rand() %4) inComponent:2animated:YES];
}
 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return3;
}
 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return1000000;
}
 
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
    return120;
}
 
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    NSArray *names = @[@"club",@"diamond",@"heart",@"spade"];
    UILabel *label = (UILabel *)view;
    label.text = names[row%4];
    if(!label) {
        label = [[UILabel alloc] init];
        label.text = names[row%4];
    }
    returnlabel;
}
 
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSArray *names = @[@"C",@"D",@"H",@"S"];
    self.title = [NSString stringWithFormat:@"%@ %@ %@",names[[pickerView selectedRowInComponent:0] %4],names[[pickerView selectedRowInComponent:1] %4],names[[pickerView selectedRowInComponent:2] %4]];
}
在这里将每个滚轮的总行数定为一百万,之所以这么大就是为了模拟出真实的圆柱形滚轮。一般来说,UIPickerView里面的滚轮都有其实元素和终止元素,滚轮到了最后一个元素之后,就不能再继续滚动了。于是,我们会想:如果程序里的滚轮和真实的圆柱形滚轮一样,那么在到达了最后一项之后,接下来应该又出现第一项才对。为了模拟这种效果,就将行数设成了一个非常大的值,使得用户不太可能滚动到末端。
77
关闭
先学习,后交费申请表
每期5位名额
在线咨询
免费电话
QQ联系
先学习,后交费
TOP
您好,您想咨询哪门课程呢?
关于我们
机构简介
官方资讯
地理位置
联系我们
0513-91107100
周一至周六     8:30-21:00
微信扫我送教程
手机端访问
南通科迅教育信息咨询有限公司     苏ICP备15009282号     联系地址:江苏省南通市人民中路23-6号新亚大厦三楼             法律顾问:江苏瑞慈律师事务所     Copyright 2008-