UITableViewCell 上的按钮在编辑模式下不起作用

Posted

技术标签:

【中文标题】UITableViewCell 上的按钮在编辑模式下不起作用【英文标题】:Buttons on UITableViewCell not working when in editing mode 【发布时间】:2016-01-21 16:05:23 【问题描述】:

我有一个UITableView 填充了带有按钮的单元格。我希望这些按钮在编辑模式下也能工作,但它们没有。 UITableViewCell 上的手势识别器似乎正在阻止按钮上的手势识别器。有人对解决这个问题有什么建议吗?

ViewController.m:

- (void)viewDidLoad 
    [super viewDidLoad];
    self.items = [@[@"one", @"two", @"three", @"four"] mutableCopy];

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

    if (cell == nil) 
        cell = [[TableViewCell alloc] init];
    

    [cell.button setTitle: self.items[indexPath.row] 
                 forState: UIControlStateNormal];
    return cell;


 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
     return YES;
 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
        [self.items removeObjectAtIndex: indexPath.row];
    

TableViewCell.h:

@interface TableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIButton *button;
- (IBAction)buttonTapped:(id)sender;
@end

所以,buttonTapped: 在单元格不处于编辑模式时被调用,但当单元格处于编辑模式时,按钮不起作用。

【问题讨论】:

您可能希望显示您使用的代码,1- 如何添加按钮,2- 如何启用“编辑”模式,3- 您使用的任何手势识别器。 我指的是 UIKit 对手势识别器的使用。故事板中添加了按钮 【参考方案1】:

对单元格中的每个按钮使用不同的标签。例如,

cellforRowAtIndexPath中,为按钮指定标签。

[Button addTarget:self action:@selector(func:event:) forControlEvents:UIControlEventTouchUpInside];
[Button setTag:indexPath.row];

现在调用函数并使用标签引用单元格。

-(IBAction)func:(id)sender event:(id)event
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint Pos = [touch locationInView:self.tableview];
    NSIndexPath *indexPath = [self.tableview indexPathForRowAtPoint:Pos];
    if(indexPath != nil)
        //do operation with indexPath
    
 

希望对你有帮助...

【讨论】:

【参考方案2】:

首先看看你所做的一些代码!没有适当的声明很难给出答案。 首先我的建议是在 UItableview 委托方法中进行手势识别。

- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath


// code


有时由于编码中的小错误,手势无法正常工作。

如果可能的话,其次,

除了直接将Gesture识别器添加到Cell中,您可以将其添加到viewDidLoad中的UItableview中。 这是在 UITableview 中处理手势的最佳方式。

正如Phix 在示例中所说,

在 didSwipe-Method 中,您可以确定受影响的 IndexPath 和单元格,如下所示:

-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer 

  if (gestureRecognizer.state == UIGestureRecognizerStateEnded) 
        CGPoint swipeLocation = [gestureRecognizer locationInView:self.tableView];
        NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
        UITableViewCell* swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
        // ...
  

您可以设置其他手势,如上。 希望能解决你的问题。

【讨论】:

抱歉,我的问题表述得不好。我更新了它,所以请检查您现在是否看到任何解决方案。无论如何感谢您的帮助【参考方案3】:

为此,您需要继承 UITableView 并使其符合 UIGestureRecognizerDelegate 协议。在 UITableView 子类的 .m 文件中添加以下代码:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
       shouldReceiveTouch:(UITouch *)touch 
    if ([touch.view isKindOfClass: [UIButton class]]) 
        return NO;
    
    return YES;

【讨论】:

以上是关于UITableViewCell 上的按钮在编辑模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在编辑模式下启用 UITableViewCell contentView 上的用户交互?

动画 UITableViewCell ContentView 在进入编辑模式时淡出

在编辑模式下按下删除按钮时 UITableView 崩溃

在 UITableViewCell 的附件视图中使用自定义按钮的问题

在编辑模式下选择 UITableViewCell

使用 Interface Builder 编辑 UITableViewCell 的模式