欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS 开发之PickerView文字和随机数的使用

程序员文章站 2024-02-12 20:12:34
ios 开发之pickerview文字和随机数的使用 pickerview用于展示供选择的内容(例如日期选取、点菜等)。 有三种情况: 1.每一列都是独立的选...

ios 开发之pickerview文字和随机数的使用

pickerview用于展示供选择的内容(例如日期选取、点菜等)。

有三种情况:

1.每一列都是独立的选取
2.右边的列受到左边列的影响
3.包含图片

pickerview和tableview类似,通过数据源来显示数据,与tableview同样地,让控制器称为其数据源。

但是pickerview的数据源仅仅提供行数和列数,在代理方法内才能设置内容。

通过两个数据源方法设置行和列数,通过一个代理方法来设定内容,注意component表示第几列:

这里的foods成员是一个复合数组,即nsarray内又有多个nsarray,每个内层的nsarray中放着一个类型的食物,不同内层nsarray之间代表不同类型的食物。

要得到这样的复合数组,可以直接建立,例如:

@[@[...],@[...],@[...]]; 

或者通过plist读取

#pragma mark - pickerview数据源方法 
 
// returns the number of 'columns' to display. 
- (nsinteger)numberofcomponentsinpickerview:(uipickerview *)pickerview{ 
  return self.foods.count; 
} 
 
// returns the # of rows in each component.. 
- (nsinteger)pickerview:(uipickerview *)pickerview numberofrowsincomponent:(nsinteger)component{ 
  nsarray *foodarray = self.foods[component]; // component是列 
  return foodarray.count; 
} 
 
#pragma mark - pickerview代理方法 
 
- (nsstring *)pickerview:(uipickerview *)pickerview titleforrow:(nsinteger)row forcomponent:(nsinteger)component{ 
  return self.foods[component][row]; 
} 

要监听选择,只需要再实现一个代理方法:

- (void)pickerview:(uipickerview *)pickerview didselectrow:(nsinteger)row incomponent:(nsinteger)component{ 
  nsstring *name = self.foods[component][row]; 
  switch (component) { 
    case 0: 
      self.fruitlabel.text = name; 
      break; 
    case 1: 
      self.mainlabel.text = name; 
      break; 
    case 2: 
      self.drinklabel.text = name; 
      break; 
    default: 
      break; 
  } 
} 

一个细节:没有点选时的显示数据初始化:

间接利用上面的选择方法来初始化数据:每列都选中第0行,由于用不到pickerview本身,因此传入nil也无妨。

for (int i = 0; i < self.foods.count; i++) { 
    [self pickerview:nil didselectrow:0 incomponent:i]; 
  } 

tip:键盘上方常常用导航工具条,用于切换上一项、下一项等内容。

直接获取当前的选取项:selectrowincomponent: 传入列号可以得到选中的是第几行。

随机数:

arc4random()可以产生0或者正整数,要产生0 ~ (x-1)的随机数,应该使用 arc4random( ) % x。

关于选择层次的设计(选择左边右边变化),是由代码实现的(更换列的数据)。

需要用到reloadallcomponents或者reloadcomponent:方法。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!