CPPickerView 1.2.0

CPPickerView 1.2.0

测试已测试
语种语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Charles Powell维护。



  • 作者
  • Charles Powell

描述

一个自定义、可配置的水平版本的 UIPickerView。

还包括CPPickerViewCell,这是一个UITableViewCell子类,它向单元格的右侧添加一个CPPickerView。此单元格是为了设置类型视图而设计的,允许在单个表格行中处理多个选项设置(而通常需要展开或多个行)。

如果您对垂直的自定义 UIPickerView 控制器感兴趣,请查看Arkady Fraerman编写的AFPickerView!此代码基本上是从他的项目分叉的。

CPPickerView screenshot

CPPickerView目前正在App Store中至少一个经过批准的应用中使用(Hipmunk for iPhone/iPad!)。

使用

常规

要自定义外观,将以下图像替换为您自己的

  • wheelBackground.png
  • stretchableGlass.png
  • shadowOverlay.png

注意:CPPickerView使用- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets(适用于iOS 5.0及以上)或- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets(适用于iOS 5.0以下)来拉伸wheelBackground.pngstretchableGlass.png。在更改图像大小之前,请确保查看在CPPickerView.m的initWithFrame:中设置的帽尺寸的示例图像,因为您可能需要调整帽尺寸。《shadowOverlay.png》当前仅拉伸以适应框架。

可以通过属性设置几个外观选项

  • BOOL showGlass - 定义是否显示在选择项目上的“玻璃”叠加层。
  • UIEdgeInsets peekInset - 定义当前选中项左侧和右侧项目的“窥视”到视图中的量。这可以用来提示用户有其他项目。注意:您很可能想保留topbottom内边距值不变,并调整leftright值。更大的内边距值意味着更多的窥视。

您还可以通过enabled属性启用/禁用用户更改选择器的功能。默认状态为YES

标准使用

创建一个CPPickerView实例并配置它

pickerView = [[CPPickerView alloc] initWithFrame:CGRectMake(30.0, 250.0, 126.0, 197.0)];
pickerView.rowFont = [UIFont boldSystemFontOfSize:19.0];
pickerView.rowIndent = 10.0;
pickerView.showGlass = YES;

设置dataSource,delegate并调用[pickerView reloadData]

pickerView.dataSource = self;
pickerView.delegate = self;
[pickerView reloadData];

然后在您的控制器中实现CPPickerViewDataSource和CPPickerViewDelegate。

CPPickerViewCell 用法

像常规的 UITableViewCell 一样使用 CPPickerViewCell。在 tableView:cellForRowAtIndexPath: 中,对单元格进行 deque 或创建

CPPickerViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[CPPickerViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

设置单元格的数据源和代理,并通知它其索引路径

cell.dataSource = self;
cell.delegate = self;
cell.currentIndexPath = indexPath;

注意:CPPickerViewCells 必须知道自己在表中的索引路径,否则你将无法在数据源和代理方法中区分它们!

根据协议实现 CPPickerViewCellDataSource 和 CPPickerViewCellDelegate。在包含的示例中,TableViewController(即 self)被设置为所有单元格的数据源和代理。

CPPickerViewCell 的数据源/代理方法将正常的 CPPickerView 数据源/代理方法转换为通过 NSIndexPath 请求数据,而不是通过 CPPickerView 对象(以匹配典型的表单元格标识方式)。

最后,重新加载单元格(即 CPPickerView,将再次请求选择器中的项目)并使用给定行的任何特定设置重新配置它(如果你正在恢复以前存储的设置)。然后返回单元格。

[cell reloadData];
// Reconfigure
cell.showGlass = YES;
cell.peekInset = UIEdgeInsetsMake(0, 18, 0, 18);
NSInteger *storedSelectedIndex = [[AnArrayOfStoredStuff objectAtIndex:indexPath.row] intValue];
[cell selectItemAtIndex:storedSelectedIndex animated:NO];  //Unanimated, because this should be immediate
return cell;

待办事项

  • 有什么想法吗?

关于

Charles Powell

如果你在这个项目中使用了它,请告诉我!