根据标题中的按钮删除UITableView中的行

时间:2012-12-15 18:00:36

标签: iphone objective-c ios ipad

我使用自定义UITableView创建了UITableViewCell。 tableview显示从数组填充的一些数据。现在我使用2张图像根据选择突出显示/取消突出显示。 [默认情况下,当应用程序打开时,我显示的第一行带有突出显示的图像而没有任何选择]。

如果我第一次成功发生删除按钮,UITableView标题现在包含一个删除按钮。

-(IBAction)delete{
    [myArray removeObjectAtIndex:0];
    [tableview reloadData];
}

现在,当tableview被刷新时,所有行都包含未突出显示的图像。现在当我选择第3行并按标题删除按钮时,我应该如何获取要删除的索引号。

我知道didSelectRowAtIndexPath但是我有什么方法可以在IBAction方法中获取所选的单元索引号?

3 个答案:

答案 0 :(得分:0)

只需创建一个包含最新选择值的ivar或属性。在didSelectRowAtIndexPath方法中,有这一行:

self.rowSelected = indexPath.row;

其中rowSelected是一个属性。然后在您的IBAction按钮中,您可以访问该属性:

-(IBAction)delete{
    if (self.rowSelected != -1){
        [myArray removeObjectAtIndex:self.rowSelected];
        [tableview reloadData];
        self.rowSelected = -1;
}

在viewDidLoad方法中,您应该将该属性的值设置为0,因为您希望在启动时选择第一行。

答案 1 :(得分:0)

在你的.h文件中,取一个实例变量NSInteger selectedRow

initviewDidLoad中,设置默认选择...

selectedRow=0;

然后在didSelectRowAtIndexPath执行以下操作......

-(void)tableView:(UITableView)tableView didSelectRowAtIndexPath:(NSIndexPath)indexPath
{
    selectedRow=indexPath.row;
}

对删除方法进行细微更改

-(IBAction)delete{
    if(selectedRow!=-1)
    {
       [myArray removeObjectAtIndex:selcetedRow];
       [tableview reloadData];
       selectedRow=-1;     //-1 to mark that no row has been selected now
    }
}

你完成了!!

答案 2 :(得分:0)

您可以使用indexPathForSelectedRow来确定当前选择的行。将您的删除方法更改为:

-(IBAction)delete {
    NSIndexPath *selectedRow = [tableview indexPathForSelectedRow];
    if (selectedRow) {
        [myArray removeObjectAtIndex:selectedRow.row];
        [tableview reloadData];
    }
}

请注意,默认情况下您必须选择第一行:

[tableview selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];