自定义UITableViewCell内的UIPickerView

时间:2014-03-30 14:38:13

标签: xcode uitableview uipickerview uipickerviewdelegate

我有一个自定义的UITableViewCell,里面有一个UIPickerView。为了管理它,我创建了一个Subclass,我实现了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计数]);在方法 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

2 个答案:

答案 0 :(得分:0)

从您的日志中,UIPicker数据源中的元素数量似乎发生了变化。

当您从self.inputArray添加或删除元素时,请务必重新加载组件,否则您将收到无效的更新错误。

重新加载选择器:

[_yourPicker reloadAllComponents]

答案 1 :(得分:0)

两年前你问过这个问题,所以你可能已经解决了这个问题,但问题是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>;
}