【问题标题】:Swipe to Delete not working滑动删除不起作用
【发布时间】:2011-04-13 18:10:37
【问题描述】:

滑动删除功能在我的表格视图中不起作用。我已经在导航栏中实现了 commitEditingStyle 委托和编辑按钮。因此,当用户单击编辑按钮时,删除和添加按钮会适当显示。但是,在滑动时,删除按钮不会出现,并且它似乎无法将滑动识别为对 setEditing 方法的调用。

然后我实现 willBeginEditingRowAtIndexPath 和 didEndEditingRwoAtIndexPath 委托如下:

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

{
 NSLog(@"WILL BEGIN EDITING");

 [self.tableView setEditing:YES animated:YES];

}


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

{

[self.tableView setEditing:NO animated:YES];

}

但是这也没有任何效果。可能的问题是什么?我为 IB 中的表格视图启用了多点触控,并且每个单元格都有一个 DetailDisclosureButton 附件。

【问题讨论】:

    标签: iphone uitableview uiview ios4


    【解决方案1】:

    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath委托方法也需要实现滑动功能。

    【讨论】:

      【解决方案2】:

      如果所有其他建议都无济于事,请尝试检查您的代码中是否有平移手势识别器。如果您在某些底层视图中有这样的东西,它将无法工作。

      【讨论】:

      • 有同样的问题,但它与 UITapGesture 相关
      • 你是个天才!几个月来我遇到了一个难以拖动滑块的问题,现在有了一个 tableviewCell,问题是我正在使用的框架中的平移手势识别器。
      【解决方案3】:

      让它发挥作用的关键是实现:

      - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
      

      记得把它放在“UITableViewDataSource”而不是“UITableViewDelegate

      【讨论】:

        【解决方案4】:

        您需要实现:

        - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
        
        
        - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;
        
        - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
        

        有了这三样东西,你就可以开始了。 (我错过了 commitEditingStyle,它从来没有工作过。

        【讨论】:

        • 我已经给出了这 3 个委托方法,但是没有用。
        【解决方案5】:

        我在 tableView:editingStyleForRowAtIndexPath: 委托方法中执行以下操作:-

        if (self.editing == NO || !indexPath)
        {   
            return UITableViewCellEditingStyleNone;
        }
        

        如果没有选择 indexPath,这应该返回编辑样式 none。由于某种原因,每当执行滑动操作时,都会执行此特定的 if 条件。在评论上面的代码 sn-p 时,滑动删除操作工作正常。

        感谢大家的帮助。

        【讨论】:

          【解决方案6】:

          您是否实现了tableView:editingStyleForRowAtIndexPath: 方法并让它返回UITableViewCellEditingStyleDelete

          【讨论】:

          • 是的,我做到了。但是其中有一些额外的东西导致了这个问题。
          • 很高兴我能让你看到正确的代码。像这样的调试问题通常很困难
          【解决方案7】:

          对于滑动删除功能,您必须实现

           -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
          {
              if (editingStyle == UITableViewCellEditingStyleDelete)
                  ; // Delete.
          }
          

          编辑:我没有很好地阅读这个问题。

          我注意到要在模拟器中进行滑动拖动,我必须在它选择单元格时按住并暂停一秒钟,然后才能成功向右滑动。

          【讨论】:

          • 是的,我已经实现了。我上面已经提到了。我现在无法访问设备,因此正在模拟器上进行测试。会不会是模拟器的问题?
          • 所以你做到了。对不起。检查我编辑的答案以防万一。模拟器在触摸行为上不是 1-1,尤其是速度。
          • 在模拟器上试过了。不工作。还在运行 3.1.2 的 iPod Touch 上安装了该应用程序。滑动删除也不起作用。非常令人费解。我想知道我是否错过了一些委托实现?
          • 事情就是这样。我开始了一个新项目,并且 UITableViewController 只实现了 commitEditingStyle 委托和滑动删除功能,效果很好。需要看看我的代码中有什么阻碍了它在我的其他项目中工作。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          • 2017-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多