我有一個帶編輯按鈕的UITableViewController
。點擊時,用戶可以刪除或添加行到UITableView。刪除行可以正常工作。但是當我想添加一個新行時,我會從左邊看到一個空白單元格的動畫,當動畫結束時,表格視圖看起來與調用該方法之前的樣子完全相同。當我添加一個新的單元格時,我將一個新的對象添加到提供我的表格視圖的數據數組中,然後添加單元格。該數據數組得到更新。所以如果我在添加新單元格後調用[tableView reloadData]
,我會看到新的單元格,但沒有任何動畫。我真的很想擁有動畫。tableView的insertRowsAtIndexPath不會調用tableView的cellForRowAtIndexPath
我有一個同樣的事情的工作示例。我意識到tableView:commitEditingStyle:forRowAtIndexPath:
被調用後,表視圖的數據源方法tableView:cellForRowAtIndexPath:
被自動調用。在我的情況下,它沒有。我想這就是爲什麼我沒有看到新的細胞。任何想法爲什麼發生這種情況?
這是我的`的tableView:commitEditingStyle:forRowAtIndexPath:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Delete the row from the data source
[self.tableData removeObjectAtIndex:[indexPath row]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.tableData forKey:self.key];
[defaults synchronize];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert)
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UITextField *textField = (UITextField *)[[cell contentView] viewWithTag:kTextFieldTag];
NSString *textFieldText = [textField text];
if (textFieldText != nil)
{
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
NSString *string = [[NSString alloc] initWithString:textFieldText];
[self.tableData addObject:string];
[string release];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.tableData forKey:self.key];
[defaults synchronize];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
// If reloadData is being called, the new cell is displayed but without the animation
// [tableView reloadData];
}
else
{
// Display alert view
// Code for displaying an AlertView
}
}
}
嘗試向'super'發送一個呼叫,看看會發生什麼。您可能會無意中繞過某些父類功能。 – Hyperbole
如果我調用[super tableView:tableView commitEditingStyle:editingStyle forRowAtIndexPath:indexPath],我得到一個異常。或者我誤解了你? – strave