pickerview越界错误 我在做城市选择这个项目时,当我快速的滚动省份名称和城市名称的时候会出现越界错误,有没有那种比较好的方法去分别控制这俩列的滚动状态。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这种级联加载的问题,是不是可以加些策略。当省份最终停止时,才开始加载显示城市的数组。先参考这个博文看看:http://ikrboy.iteye.com/blog/2003127 #pragma - UIPickerView DataSource-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ NSInteger index = pickerView.tag; NSInteger rows = 0; if (index == 1001) { rows = _genderPickerViewArray.count; }else if (index == 1002){ if (component == 0) { rows = _cityPickerViewArray.count; }else{ NSInteger selectedRow = [pickerView selectedRowInComponent:0]; rows = ((ProvinceModel*)_cityPickerViewArray[selectedRow]).citys.count; } } return rows;}-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ NSInteger index = pickerView.tag; NSInteger groups = 0; if (index == 1001) { groups = 1; }else if (index == 1002){ groups = 2; } return groups;}#pragma - UIPickerView Delegate-(NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ NSInteger index = pickerView.tag; NSString * title = @""; if (index == 1001) { title = _genderPickerViewArray[row]; }else if (index == 1002){ if (component == 0) { ProvinceModel * model = (ProvinceModel*)_cityPickerViewArray[row]; title = model.provinceName; }else{ NSInteger selectedRow = [pickerView selectedRowInComponent:0]; ProvinceModel * provModel = (ProvinceModel*)_cityPickerViewArray[selectedRow]; // 数组越界保护 if (row >= provModel.citys.count) { title = @""; }else{ CityModel * cityModel = (CityModel*)provModel.citys[row]; title = cityModel.cityName; } } } return title;}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ NSInteger index = pickerView.tag; if (index == 1001) { _genderLabel.text = _genderPickerViewArray[row]; _genderNumber = [self getGenderNumWithString:_genderLabel.text]; }else if (index == 1002){ if (component == 0) { // component=0 每次变化, component=1刷新一次, 且默认选中index=0 // 同时调用一次本方法, 解决界面刷新问题. [_pickerViewCity reloadComponent:1]; [_pickerViewCity selectRow:0 inComponent:1 animated:NO]; [self pickerView:pickerView didSelectRow:[pickerView selectedRowInComponent:1] inComponent:1]; }else{ NSInteger selectedRow = [pickerView selectedRowInComponent:0]; ProvinceModel * provModel = (ProvinceModel*)_cityPickerViewArray[selectedRow]; // 数组越界保护 if (row >= provModel.citys.count) { _cityLabel.text = @""; }else{ CityModel * cityModel = (CityModel*)provModel.citys[row]; _cityLabel.text = cityModel.cityName; } } }} [self preforSelector:@selector(XXX:) afterDelay:1];配合[NSObject cancelPreviousPerformRequestsWithTarget:self];来实现 亲们,你们解决了这个问题了吗?我提供一个思路:使用一个NSArray保存上一次的城市数据,然后对此nsarray操作。 有在用appcelerator开发IPhone程序的吗 汉字转码问题 新手关于xcode4.2 UIPickerView NSAttributedString 设置字体大小无效 有关于ios从服务器上请求json数据处理的问题 ARC下如何实现内存释放 ios开发者账号申请的一些问题 UIEdgeInsetsMake 失效了 iOS开发中,代码如何判断 “竖排方向锁定” 是否开启? ios https请求报错问题 问一个关于下载文件的问题 iOS 真机测试问题:Ineligible Devices
先参考这个博文看看:http://ikrboy.iteye.com/blog/2003127
NSInteger index = pickerView.tag;
NSInteger rows = 0;
if (index == 1001) {
rows = _genderPickerViewArray.count;
}else if (index == 1002){
if (component == 0) {
rows = _cityPickerViewArray.count;
}else{
NSInteger selectedRow = [pickerView selectedRowInComponent:0];
rows = ((ProvinceModel*)_cityPickerViewArray[selectedRow]).citys.count;
}
}
return rows;
}-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
NSInteger index = pickerView.tag;
NSInteger groups = 0;
if (index == 1001) {
groups = 1;
}else if (index == 1002){
groups = 2;
}
return groups;
}#pragma - UIPickerView Delegate-(NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
NSInteger index = pickerView.tag;
NSString * title = @"";
if (index == 1001) {
title = _genderPickerViewArray[row];
}else if (index == 1002){
if (component == 0) {
ProvinceModel * model = (ProvinceModel*)_cityPickerViewArray[row];
title = model.provinceName;
}else{
NSInteger selectedRow = [pickerView selectedRowInComponent:0];
ProvinceModel * provModel = (ProvinceModel*)_cityPickerViewArray[selectedRow];
// 数组越界保护
if (row >= provModel.citys.count) {
title = @"";
}else{
CityModel * cityModel = (CityModel*)provModel.citys[row];
title = cityModel.cityName;
}
}
}
return title;
}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSInteger index = pickerView.tag;
if (index == 1001) {
_genderLabel.text = _genderPickerViewArray[row];
_genderNumber = [self getGenderNumWithString:_genderLabel.text];
}else if (index == 1002){
if (component == 0) {
// component=0 每次变化, component=1刷新一次, 且默认选中index=0
// 同时调用一次本方法, 解决界面刷新问题.
[_pickerViewCity reloadComponent:1];
[_pickerViewCity selectRow:0 inComponent:1 animated:NO];
[self pickerView:pickerView didSelectRow:[pickerView selectedRowInComponent:1] inComponent:1];
}else{
NSInteger selectedRow = [pickerView selectedRowInComponent:0];
ProvinceModel * provModel = (ProvinceModel*)_cityPickerViewArray[selectedRow];
// 数组越界保护
if (row >= provModel.citys.count) {
_cityLabel.text = @"";
}else{
CityModel * cityModel = (CityModel*)provModel.citys[row];
_cityLabel.text = cityModel.cityName;
}
}
}
}
配合
[NSObject cancelPreviousPerformRequestsWithTarget:self];
来实现
我提供一个思路:使用一个NSArray保存上一次的城市数据,然后对此nsarray操作。