2014-03-30 130 views
0

我有一个自定义的UITableViewCell,里面有一个UIPickerView。为了解决这个问题,我创建了一个Subclass,实现了UIPickerView委托和数据源方法。当我的cellForRowAtIndexPath实现这样的:自定义UITableViewCell中的UIPickerView

- (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)必须 等于 更新(0)之前在该部分中包含的行数,加上或减去从 插入或删除的行数(0插入,0删除)和正数或负数移动 行进入或退出该部分(0移入,0移出)。'

但是,如果我改变numberOfRowsInComponent:返回(在这个例子中7)的实际行数,一切工作就不错了。

我一直在尝试,但我没有看到发现问题/解决方案。任何帮助,将不胜感激。提前致谢!

编辑!正如@meda I推断的那样,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 
+0

日志吧'的NSLog(@ “PickerInputArray计数” %@”,[self.cellPickerInputArray计数]);'如果不是等于7您需要找出为什么 – meda

+0

是的,已经尝试过了。请参阅上面的编辑。 – Marcal

回答

0

从你的日志,似乎在你的UIPicker数据源改变元素的数量。

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

重载机械手:

[_yourPicker reloadAllComponents] 
+0

self.inputArray是一个静态数组,它不会更改。我也不明白的是为什么“numberOfRowsInComponent”被称为10次... – Marcal

+0

是的,我注意到,你是否想要为第2节的每一行返回该单元格? – meda

+0

否。另外,当inputArray内容为16项时,这个选择器方法被调用的次数是相同的:10次。 – Marcal

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>; 
}