2014-03-30 178 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>; 
}