如何在自定义UITableViewCell XIB中使用具有两个视图的操作?

时间:2013-11-12 13:53:21

标签: objective-c uitableview parse-platform

我目前有一个UITableViewCell设置有两个视图,一个底视图和一个顶视图。顶视图包含所有默认文本,底部视图将包含两个按钮。 (现在一个用于删除,如下图所示) enter image description here

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

现在我的问题是:当用户点击“删除”时,我将如何制作它将从tableview和Parse.com后端删除它?

我已经在详细视图控制器中编写了一次删除特定事件的代码(首先分配并启动详细视图并将表视图控制器上的object属性设置为名为selectedEvent的详细视图控制器上的object属性):

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中做到这一点,考虑删除按钮和方法将位于实际的CustomCell XIB文件中,所以它不像我在表视图控制器中的cellForRowAtIndexPath中设置它?

1 个答案:

答案 0 :(得分:1)

它的工作方式与视图控制器中的任何其他元素类似。您只需在ViewController中创建您的UITableView即可创建IBActions。之后转到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文档中。