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