UIPickerView
来源:互联网 发布:热敏打印机编辑软件 编辑:程序博客网 时间:2024/05/02 04:39
UIPickerView
效果图:
/** 数据源 */
@property(nonatomic,assign)id<UIPickerViewDataSource> dataSource; // 默认为nil,弱引用
/** 代理 */
@property(nonatomic,assign)id<UIPickerViewDelegate> delegate; // 默认为nil,弱引用
/** 显示选择标示 */
@property(nonatomic) BOOL showsSelectionIndicator; // 默认为NO
// 列数
@property(nonatomic,readonly) NSInteger numberOfComponents;
// component列中的行数
- (NSInteger)numberOfRowsInComponent:(NSInteger)component;
// 指定列中每一行的size
- (CGSize)rowSizeForComponent:(NSInteger)component;
// 返回由代理方法pickerView:viewForRow:forComponent:reusingView:提供的视图
// 如果没有实现该代理方法,或者component列的row行不可见,则返回nil
- (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component;
// 重新加载所有列的数据
- (void)reloadAllComponents;
// 重新加载指定列的数据
- (void)reloadComponent:(NSInteger)component;
// 选中指定component列中的row行,不会触发代理方法
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated; // 滚动指定的行到中间位置
// 返回当前选中的行,如果没有选中行,返回-1
- (NSInteger)selectedRowInComponent:(NSInteger)component;
@end
/** 数据源协议,所有方法都必须实现 */
@protocol UIPickerViewDataSource<NSObject>
@required
// 返回要显示的列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// 返回component列中的数据行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
@end
/** 代理协议,所有方法都是可选的 */
@protocolUIPickerViewDelegate<NSObject>
@optional
// 返回指定列的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
// 返回指定列的行高
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
/**
以下三个返回指定列对应行的内容
可以是:
1> NSString
2> NSAttributedString
如果同时实现了以上两个方法,优先选择NSAttributedString的代理方法执行
3> UIView
可以返回自定义的视图,reusingView没有真正实现应用。
*/
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0);
- (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;
控制器.m文件
代码:
//返回列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 2;}
//返回每列中的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ //如果是第0组 直接返回数组的长度 if (component == 0) { return self.dataArray.count; }else{ //如果是第1组 先确定选中的是第0组哪一行 在返回那一行的数组长度 NSInteger selRow = [pickerView selectedRowInComponent:0]; ProviceModel * Promodel = self.dataArray[selRow]; self.selProvice = Promodel; return self.selProvice.cities.count; }}
/**
<span style="font-family: Menlo;"><span style="white-space:pre"></span><span style="color:#ff0000;">细节处理</span></span>
<span style="font-family: Menlo;"><span style="color:#ff0000;"><span style="white-space:pre"></span>在滚动第0列的同时,滚动第1列,程序会崩溃!</span></span>
<span style="font-family: Menlo;"><span style="color:#ff0000;"><span style="white-space:pre"></span>原因:当第0列还没有滚动完成时,第一列展示的数据还是第0列原来选中行的数据,如果新选中的行和之前</span></span>
<span style="font-family: Menlo;"><span style="color:#ff0000;"><span style="white-space:pre"></span> 行的下标不同,会产生数组月结的问题。</span></span>
<span style="font-family: Menlo;"><span style="color:#ff0000;"><span style="white-space:pre"></span>解决方法:</span></span>
<span style="font-family: Menlo;"><span style="color:#ff0000;"><span style="white-space:pre"></span>将第0列选中的行数据保存起来,第1列直接访问这个保存起来的数据。</span></span>
<span style="font-family: Menlo;">*/</span>
//返回每列中每一行的内容- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ // NSString * cityStr = model.cities[row]; if (0 == component) { ProviceModel * model = self.dataArray[row]; return model.name; }else{ //先确定选中第0组的哪一行// NSInteger selIndex = [pickerView selectedRowInComponent:0];// // ProviceModel * model = self.dataArray[selIndex];//// self.selProvice = model; return self.selProvice.cities[row]; }}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ if (0 == component) { [pickerView reloadComponent:1]; }}
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIpickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIPickerView
- UIpickerview
- UIPickerView
- UIpickerView
- UIPickerView
- Java多线程中异常的处理UncaughtExceptionHandler
- 关于angularjs的用户登录验证
- 收获与北京的那份情
- 从Unity引擎过度到Unreal4引擎(最终版)
- 编程易错点
- UIPickerView
- Linux常用命令总结(1)
- Mysql学习历程(一)
- git配置
- fast路由器初始密码 TP-Link、D-Link、ipTIME、Tenda/、Fast水星等路由器恢复出厂设置
- oc考试题
- 指针函数与函数指针的区别
- web.xml中<load-on-startup></load-on-startup>中的作用
- 操作系统: 最佳适配算法和邻近适配算法的模拟实现(内存分配算法)