0

我目前有一个 UITableViewCell 设置了两个视图,一个底部视图和一个顶部视图。顶视图包含所有默认文本,底视图将包含两个按钮。(现在一个用于删除,如下图所示) 在此处输入图像描述

现在我设置了两个 UIGestureRecognizers,一个向左滑动,另一个在单元格上向右滑动。当他们在单元格上向左滑动时,底部视图会滑过一半,隐藏顶部视图的一半,如果您向右滑动,它会隐藏底部视图。(如上图)

现在我的问题是:我将如何去做,所以当用户点击删除时,它会从 tableview 和 Parse.com 后端删除它?

我已经编写了代码以通过执行此操作在详细视图控制器中删除特定事件一次(首先分配和初始化详细视图并将表视图控制器上的对象属性设置为详细视图控制器上的对象属性,称为 selectedEvent):

PFRelation *relation = [self.currentUser relationforKey:@"watching"];
[relation removeObject:self.selectedEvent];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (error)
    {
        NSString *errorString = [[error userInfo] objectForKey:@"error"];
        UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlertView show];
    }
    else
    {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    [SVProgressHUD showSuccessWithStatus:@"Removed from Watch List!"];

}];

但不了解我将如何从实际的 Tableview 中执行此操作,考虑到 Delete 按钮和方法将位于实际的 CustomCell XIB 文件上,所以它不像我在表视图控制器的 cellForRowAtIndexPath 中设置它?

4

1 回答 1

1

它的工作方式与视图控制器中的任何其他元素类似。您只需在拥有 UITableView 的 ViewController 中创建您的 IBAction。之后转到 XIB 并使用 Connections 检查器将您需要的事件(即:Touch Up Inside)链接到您的 IBAction。

鉴于所有行中的所有按钮都将调用相同的方法,请确保将行索引存储在每个按钮的标记中。在你的 cellForRowAtIndexPath 中:

cell.yourButton.tag = indexPath.row;

因此,在您的 IBAction 方法中,您可以收集该 rowIndex 以了解在 tableView 的哪个单元格中单击了按钮:

- (IBAction)onDeleteButtonClicked:(id)sender
{
    const int rowIndex = ((UIButton *)sender).tag;
    ...

编辑 2:您可以通过在 cellForRowAtIndexPath 中引用您的方法来做同样的事情:

cell.deleteButton.tag = indexPath.row;
[cell.deleteButton addTarget:self action:@selector(onDeleteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

编辑 3:要使用动画从列表中删除一行,您可以使用

[tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:rowIndex inSection:0]]
                                  withRowAnimation:UITableViewRowAnimationRight];

还有其他选项可以更改行动画以及同时删除许多项目的方法。全部在 Apple 文档中。

于 2013-11-12T15:00:15.107 回答