区分以编程方式创建的多个UIActionSheets

时间:2014-08-10 00:13:58

标签: ios objective-c uitableview uiactionsheet

当用户长按UIActionSheet时,我希望自己出现UITableViewCell。问题是,我不知道如何引用用于启动操作表的单元格。我知道你可以在动作表中使用标签来识别它们,但我会动态地为每个单元创建它们,而不是静态表格。

在这里,我创建了长按识别器并将其绑定到每个单元格的单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    // other stuff

    UILongPressGestureRecognizer * tap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showRouteOptionsActionSheet:)];
    [cell addGestureRecognizer:tap];

    return cell;
}

当您长按单元格时会调用此方法,这是我创建ActionSheet的地方

- (void)showRouteOptionsActionSheet:(UIGestureRecognizer *)gestureRecognizer{
    if(gestureRecognizer.state == UIGestureRecognizerStateBegan){
        UIActionSheet * routeOptions = [[UIActionSheet alloc] initWithTitle:@"Options" delegate:self cancelButtonTitle:@"Close" destructiveButtonTitle:@"Delete" otherButtonTitles:@"Edit", @"More Information", nil];
        [routeOptions showInView:self.view];
    }
}

点击ActionSheet中的按钮

时会调用此方法
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0){
        // Delete
    } else if(buttonIndex == 1){
        // Edit
    } else if(buttonIndex == 2){
        // More Info
    }  else if(buttonIndex == 3){
        // Close
    }
}

在最后一种方法中,我无法知道用户按哪个单元格。据我所知,你不能用@ selector&#39来传递变量,但必须有办法解决这个问题。

Stack Overflow here上有一个类似的问题,但解决方案是将标签硬编码到操作表。因为我在用户长时间按下单元格时创建了动作表,这是行不通的。

0 个答案:

没有答案