当前位置: 移动技术网 > 移动技术>移动开发>IOS > ios 构建含有多个滚轮的表格

ios 构建含有多个滚轮的表格

2018年11月25日  | 移动技术网移动技术  | 我要评论
有时用户需要从一份很长的列表中选择某个条目,或是需要同时从多份列表中分别做出选择。uipickerview实例很适合这些情况下。uipickerview对象制作出的表格提供了很多各自独立的滚轮。用户

有时用户需要从一份很长的列表中选择某个条目,或是需要同时从多份列表中分别做出选择。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、主要代码

- (void)viewdidload {
    [super viewdidload];
    // 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:0 animated:yes];
    [picker selectrow:5000 + (rand() % 4) incomponent:1 animated:yes];
    [picker selectrow:5000 + (rand() % 4) incomponent:2 animated:yes];
}

- (nsinteger)numberofcomponentsinpickerview:(uipickerview *)pickerview
{
    return 3;
}

- (nsinteger)pickerview:(uipickerview *)pickerview numberofrowsincomponent:(nsinteger)component
{
    return 1000000;
}

- (cgfloat)pickerview:(uipickerview *)pickerview rowheightforcomponent:(nsinteger)component
{
    return 120;
}

- (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];
    }
    return label;
}

- (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里面的滚轮都有其实元素和终止元素,滚轮到了最后一个元素之后,就不能再继续滚动了。于是,我们会想:如果程序里的滚轮和真实的圆柱形滚轮一样,那么在到达了最后一项之后,接下来应该又出现第一项才对。为了模拟这种效果,就将行数设成了一个非常大的值,使得用户不太可能滚动到末端。

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网