如何使用单元格中的自定义按钮删除UITableView中的单元格?

时间:2010-04-30 14:12:25

标签: iphone cocoa-touch uitableview

我有UITableView。我定制了单元格高度(80.0f)。

我有4个标签(UILabel)和1个图像(UIImage)和3个按钮(UIButton)。其中一个按钮是删除按钮。通过触摸图像上的单元格或按钮(播放按钮),可以加载和播放视频。

我需要通过触摸删除按钮来删除单元格。 我为删除按钮编写了一个选择器。我可以从库中删除视频。但是如何从表中删除单元格?

谢谢。 下图显示了我程序的删除按钮。

alt text http://www.freeimagehosting.net/uploads/c2036dee19.png

3 个答案:

答案 0 :(得分:3)

如果您的模型按照您的说法更新,请在表格视图上使用此方法删除带动画的单元格:

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths
              withRowAnimation:(UITableViewRowAnimation)animation

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/deleteRowsAtIndexPaths:withRowAnimation

表视图将为您清理单元格。

请注意,只有在触摸了tableview的删除按钮(通过编辑模式或刷卡到删除的按钮)时才会调用commitEditingStyle:方法。根据您的问题,听起来您有一个自定义按钮,这就是为什么不调用此方法。你可以自己调用它,但我不推荐它,因为它只能由tableview本身调用。

答案 1 :(得分:2)

当我这样做时,我得到了解决方案。

-(void)deleteClicked:(id)sender
{
    UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    clickedButtonPath = [self.tableView indexPathForCell:clickedCell];

    NSArray *arrayDelete = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectoryD = [arrayDelete objectAtIndex:0]; 

    NSDictionary *dictOfplist1 = [contentArray objectAtIndex:clickedButtonPath.row];

   //To remove the videos from Documents folder       
    NSString *pathTemp1  = [documentsDirectoryD stringByAppendingString:[dictOfplist1 objectForKey:@"fileVideoE"]];
    BOOL succeed1 = [[NSFileManager defaultManager] removeItemAtPath:pathTemp1 error:nil];

   //To remove the images shown in cell from Documents folder.  
    NSString *pathTemp2  = [documentsDirectoryD stringByAppendingString:[dictOfplist1 objectForKey:@"fileImageE"]];
    BOOL succeed2 = [[NSFileManager defaultManager] removeItemAtPath:pathTemp2 error:nil];

   //To remove the data from the plist which is in Documents folder.
    NSString *pathDelete = [documentsDirectoryD stringByAppendingString:@"/details.plist"];
    [contentArray removeObjectAtIndex:[clickedButtonPath row]];
    [contentArray writeToFile:pathDelete atomically: YES];

    //To reload the data of the plist after deleting the items from it.
 [self.tableView reloadData];
}     

删除单元格的每件事都很好,删除了plist中的数据,删除了Documents文件夹中的视频和图像。

这是删除第2行时的图像 谢谢。

alt text http://www.freeimagehosting.net/uploads/f3c96ae3a7.png

答案 2 :(得分:1)

呼叫:

[self.tableView reloadData];

你需要对MVC习语进行一些研究。