2011-09-29 37 views
0

我收到一個奇怪的問題。我有一個自定義的UITableViewCell,每個單元都有一個UIButton和UITextField。點擊按鈕時,它將文本字段值更改爲某個常量。cellForRowAtIndexPath插入數組

現在cellForRowAtIndexPath方法中我有這樣的:

folderTitleTextView.tag=indexPath.row; 
    [arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row]; 
    NSLog(@"indexpath.row:%i", indexPath.row); 
    NSLog(@"text fields count %i", [arrayOfTextFields count]); 

所以,如果我有兩個單元格,然後我每次重裝該表時,它增加了兩個對象的arrayofTextFields,即使它應該更換現有的。所以,如果我有兩個細胞,我重裝表3次,然後因爲某些原因arrayOfTextFields數爲8

回答

1

folderTitleTextView.tag=indexPath.row;因爲一切都與0標籤開始,所以用viewWithTag:0訪問視圖時,或者是不是一個好主意當設置行0時,你會得到奇怪的結果。

我也建議檢查項目的數量arrayOfTextFields和使用[arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView];[arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row];根據當前計數arrayOfTextFields

試試這個:

folderTitleTextView.tag = (indexPath.row + 100); 
if ([arrayOfTextFields count] <= indexPath.row) { 
    [arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row]; 
} else { 
    [arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView]; 
} 
NSLog(@"indexpath.row:%i", indexPath.row); 
NSLog(@"text fields count %i", [arrayOfTextFields count]); 
+0

感謝您的幫助。我能夠解決這個問題:'if(indexPath.row <[arrayOfTextFields count]) [arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView];其他 [arrayOfTextFields addObject:folderTitleTextView]; ' – Snowman

+0

非常酷!很高興你把它修好了,@mohabitar。 – chown

1

問題是什麼是你想怎麼辦?

現在,您每次顯示單元格時都會將textView添加到數組。

如果你有1個單元,你有1個textView在數組中,因爲cellForRowAtIndexPath:被稱爲1次。
如果你添加另一個單元格,所以你有2個總單元格cellForRowAtIndexPath將被調用另外2次,它會將2個textViews添加到已經有一個的數組中 - > 3
如果添加另一個單元格cellForRowAtIndexPath將3個更多textViews添加到3已經在那裏 - > 6

這麼多的解釋你的結果。


我的建議是擺脫那個數組,擺脫標籤,很可能這些都是不需要的。

你可以用這樣的訪問單元:

- (IBAction)buttonPressed:(UIButton *)sender { 
    UIView *contentView = [sender superview]; 
    UITableViewCell *cell = (UITableViewCell *)[contentView superview]; 
    // you should assign a tag to the textField of your cell. Use the same tag for each textView in all cells. 
    UITextField *textField = (UITextField *)[cell viewWithTag:42]; 
    textField.text = @"Foo"; 
} 
+0

每個自定義單元格都有一個保存單元格標題的UITextField,以及一個啓用文本字段進行編輯並將其指定爲第一響應者的按鈕。所以我想要做的是當按鈕被按下時,它從數組訪問某個文本視圖並對其進行編輯。不過,我需要設置他們的標籤,以便我可以訪問正確的文本視圖。如果我有5個單元格,那麼有5個按鈕,並且我沒有設置它們的標籤,那麼當我按下它時,它將不知道要編輯哪個文本框。 – Snowman

+0

您是否看到我添加的第二部分?可能你不需要標籤,並且你不需要存儲textViews的數組。 –

+0

嗯,這是一個好主意,但我的自定義單元沒有自己的類,並擁有該表擁有同一類。所以我不能像這樣訪問單元格的文件夾TitleTextView ..或者我可以嗎? – Snowman