自定义 UITableViewCell 中的 UIPickerView
Posted
技术标签:
【中文标题】自定义 UITableViewCell 中的 UIPickerView【英文标题】:UIPickerView inside a Custom UITableViewCell 【发布时间】:2014-03-30 14:38:12 【问题描述】:我有一个自定义的 UITableViewCell,里面有一个 UIPickerView。为了管理它,我创建了一个子类,我在其中实现了 UIPickerView 委托和数据源方法。当我这样实现的 cellForRowAtIndexPath 时:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.section==2)
PickerCellTableViewCell *cell2=[tableView dequeueReusableCellWithIdentifier:@"pickerCell" forIndexPath:indexPath];
cell2.cellPickerInputArray=self.pickerArray;
return cell2;
else
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"normalCell" forIndexPath:indexPath];
cell.textLabel.text=[[self.inputArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
return cell;
在子类 .m 文件中,我有以下内容:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
return [self.cellPickerInputArray count];
我有以下问题:如果我这样离开它,它会崩溃并且控制台会给我这个:
无效更新:第 0 节中的行数无效。 更新 (7) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (0),加上或减去插入或删除的行数 该部分(0 插入,0 删除)和加或减的数量 移入或移出该部分的行(0 移入,0 移出)。'
但是,如果我更改 numberOfRowsInComponent: 以返回实际的行数(本例中为 7),一切正常。
我一直在尝试,但找不到问题/解决方案。任何帮助,将不胜感激。提前致谢!
编辑!正如@meda 所建议的,我 NSLoged NSLog(@"PickerInputArray count"%@",[self.cellPickerInputArray
count]); pickerView numberOfRowsInComponent
这里:
2014-03-30 21:04:54.756 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.757 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.758 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.758 TestPickerOnTable[3498:60b] PickerInputArray count0
2014-03-30 21:04:54.762 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.765 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.767 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.770 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.771 TestPickerOnTable[3498:60b] PickerInputArray count7
2014-03-30 21:04:54.771 TestPickerOnTable[3498:60b] PickerInputArray count7
【问题讨论】:
记录它NSLog(@"PickerInputArray count"%@",[self.cellPickerInputArray count]);
如果它不等于 7,你需要找出原因
是的,已经试过了。请参阅上面的编辑。
【参考方案1】:
从您的日志来看,您的UIPicker
数据源中的元素数量似乎发生了变化。
当您从 self.inputArray
添加或删除元素时,请务必重新加载组件,否则您将收到无效更新错误。
重新加载选择器:
[_yourPicker reloadAllComponents]
【讨论】:
self.inputArray 是一个静态数组,它不会改变。我也不明白为什么“numberOfRowsInComponent”被调用了10次...... 是的,我注意到了,您是不是要为第 2 节的每一行返回该单元格? 没有。另外当 inputArray 内容为 16 项时,这个选择器方法被调用的次数也是一样的:10 次。【参考方案2】:你两年前问过这个问题,所以你可能已经解决了,但问题是在cellForRowAtIndexPath
中,你根据IndexPath.section
的值创建了两种不同类型的单元格。
if indexPath.section == 2
,您的(自定义)单元格有一个cellPickerInputArray
。否则,您的(正常)单元格没有那个,所以您的 numberOfRowsInComponent
失败,因为现在有数组可以获取计数。
要解决此问题,请将您的 numberOfRowsInComponent
更改为具有相同的 if..then..else
结构:
if (indexPath.section==2)
return [self.cellPickerInputArray count];
else
return <some appropriate value>;
【讨论】:
以上是关于自定义 UITableViewCell 中的 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章
在 Storyboard 中设计的自定义 UITableViewCell 中的自定义 UIView
ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController