【问题标题】:Show message row cannot be deleted in tableview在tableview中无法删除显示消息行
【发布时间】:2018-01-23 03:26:16
【问题描述】:

我有一个表格视图,当用户在行上滑动时显示删除按钮。

一切正常,但由于条件有限,无法删除几行。 我如何在 UI 上显示一条消息,告诉该行不能被删除。 我已经实现了以下代表

tableView:canEditRowAtIndexPath:

如果需要删除行,则返回 true 和 false。

但是当用户登陆屏幕或调用重新加载表视图时,会调用此方法,因此我无法在不添加一些奇怪的 if 条件的情况下将代码放入此委托中。

我在委托中得到了这个工作

tableView:editingStyleForRowAtIndexPath:

只有在用户滑动时才会调用。 但是这个委托的问题是,在 iOS 10.2 中,之前的每一行都调用了这个委托,canEditRowAtIndexPath 被调用,所以它可以工作。但在最新的 iOS 11.2.2 中,editingStyleForRowAtIndexPathcanEditRowAtIndexPath 之后被调用,这导致只调用那些可以删除的行而不是其他行。 iOS 11.2 中的这种模式确实有意义,但它不允许我在我的解决方案中使用这个委托。谁能建议我如何实现所需的行为?

【问题讨论】:

  • 您在寻找tableView:commitEditingStyle:forRowAtIndexPath:吗?有了这个,您可以通过检查editingStyle 根据条件显示警报
  • 'tableView:commitEditingStyle' ,仅对启用了编辑的行调用。因此它可用于确认用户是否要删除行,但在我的情况下,我不想向用户显示该行可以被删除,而只是给出一个类似 toast 的消息,该行不能被删除。
  • 我认为您最好的选择是在您的单元格中添加手势识别器。
  • @Skywalker 我试图将手势放在我不想显示为可以删除的单元格上,但在创建单元格时我无法确定我的状况,我必须检查每个用户在行上滑动的时间,以决定是否可以向用户显示删除选项。
  • 我认为你应该使用tableView:canEditRowAtIndexPath: 并使用奇怪的if 条件。

标签: ios objective-c swift uitableview


【解决方案1】:

试试这个:

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
   // Set Condition which row delete 
   NSString *isDeleteorNot = [[arrInstaAccountList objectAtIndex:indexPath.row] objectForKey:@"Status"];

   // Set your if condition
   if ([isDeleteorNot isEqualToString:@"delete"])
   { 
       return true;
   }
   else
   {
       return false;
   } 
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{


   // Set Condition which row delete 
   NSString *isDeleteorNot = [[arrInstaAccountList objectAtIndex:indexPath.row] objectForKey:@"Status"];

   // Set your if condition
   if ([isDeleteorNot isEqualToString:@"delete"])
   { 
       cell.Toast.text = @"Delete";
   }
   else
   {
       cell.Toast.text = @"Not Delete";

   } 

}

【讨论】:

  • 我需要显示类似 toast 的消息,告诉用户用户不能在这一行上滑动删除。
  • @soansaini 这个条件集 tableview:cellForRowAtIndexPath: 方法
  • 无法理解代码,每次重新加载视图时都会调用 cellForRowAtIndexPath。我需要获取用户在 Cell 顶部滑动时的信息。并且表必须决定是否可以编辑行。那时我可以显示一条 toast 消息,例如无法删除行,如果它的其他表可以继续显示单元格上的删除按钮。
  • @soansaini 我已经在这个canEditRowAtIndexPath 方法中添加了代码。
  • 我正在以MVVM模式编写代码,所以我是否允许的条件是在VM中,它一直在变化。我理解你的代码,但它不能解决我的问题。我加载我的单元格,当用户在一行上滑动时,我检查条件并返回是和否,我可以在那里显示一条 toast 消息,但问题是这个方法总是从不同的地方调用,比如当你重新加载表此方法得到评估。因此,如果我在此方法中放入 toast 消息,则 toast 消息会显示多次。并且主要是当用户刚刚登陆屏幕时。所以我不能把代码放在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2021-04-25
  • 2014-03-21
  • 2011-05-04
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多