0

我想要做的是在 UITableView 上,用户滑动一行以调出删除选项,一旦他们按下删除,就会弹出一个 UIActionSheet 以确保他们想要删除该行,因为它比典型的行更重要在一张桌子上。根据他们按下的内容,我可以从数据库中删除该行中的数据。我如何将该行的 indexPath 放入 UIActionSheet 中?如果我有一个单节表,那么我也许可以使用该行的标记并重新创建 indexPath,但是对于多个节,如何做到这一点?

似乎有一个更好的方法可以在我的

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

方法,我可以删除那里的行。或者有没有办法从 UIActionSheet 传回信息?谢谢!

4

3 回答 3

0

-tableView:commitEditingStyle:forRowAtIndexPath:您可以将 存储为indexPath属性/ivar,然后将ActionSheet.

当用户确认删除时,只需删除数据(您已经存储了indexPath!)并从表格视图(-deleteRowsAtIndexPaths:withRowAnimation:-reloadData)中删除单元格。不要忘记保留/释放indexPath.

于 2012-07-09T17:23:29.660 回答
0

有几件事:

  1. 我不会使用 UIActionSheet,我会使用 UIAlertView。
  2. 正在“编辑”以进行删除的行可以或被设置为 selectedRow。
  3. 如果用户选择“是”继续并删除该行按钮,那么您可以调用

UITableView 对象上的 [indexPathForSelectedRow] 方法。无需保存额外的 NSIndexPath 对象或记住状态。TableView 已经为您做到了。

于 2012-07-09T17:50:43.603 回答
0

我通过为 actionSheet = indexpath.row 设置标签来作弊

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // If row is deleted, remove it from the list.
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        UIActionSheet *registerActionSheet = [[UIActionSheet alloc] initWithTitle:@"Sure You Want To Delete?"delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:ACTION_SHEET_DELETE_BUTTON_TITLE otherButtonTitles: nil];
        registerActionSheet.tag = indexPath.row;
        registerActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
        [registerActionSheet showInView:self.view];
    }
}

进而

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:ACTION_SHEET_DELETE_BUTTON_TITLE]) {

         //do deleting stuff here using actionSheet.tag as index

    }

}

编辑:刚刚看到您正在使用的多个部分的微妙之处。通过向其添加 indexPath 属性来扩展 UIActionSheet 会对您的情况有所帮助吗?

或将标签设置为“x”数字,前半部分表示部分,后半部分表示行。

于 2012-07-09T17:54:56.703 回答