繁体   English   中英

在iOS中,领域是否支持删除带有动画的表格视图中的行?

[英]In iOS does realm support deleting a row in a tableview with animation?

例如,这是以下有关删除tableview行的代码。

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        self.array = [Note allObjects];
        RLMRealm *realm = RLMRealm.defaultRealm;
        [realm beginWriteTransaction];
        NSLog(@"%@",self.array[indexPath.row]);
        [realm deleteObject:self.array[indexPath.row]];
        [realm commitWriteTransaction];
    }
}

尽管我得到了最初的结果,但我想删除该行,但不幸的是它没有动画,因此表视图的突然更新看起来并不好。 我知道,通常这是在tableview中使用动画实现的实际方法[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

顺便说一句,这是我发现的与问题最接近的东西,但对我而言却不起作用。 https://github.com/realm/realm-cocoa/issues/1045

有任何想法吗?

您走在正确的轨道上。

您是否使用通知块在某处更新UI? - >

// Observe Realm Notifications
self.token = [realm addNotificationBlock:^(NSString *note, RLMRealm * realm) {
  [myViewController updateUI];
}];

如果是,那么您首先必须对删除进行动画处理,然后将其从领域中删除:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
      [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
      [self deleteItemAtIndexPath: indexPath];
  }
}

- (void)deleteItemAtIndexPath:(NSIndexPath *)indexPath {
  // Delete the row from the data source
  self.array = [Note allObjects];
  RLMRealm *realm = RLMRealm.defaultRealm;
  [realm beginWriteTransaction];
  NSLog(@"%@",self.array[indexPath.row]);
  [realm deleteObject:self.array[indexPath.row]];
  [realm commitWriteTransaction];
}

无论如何。 只需先为您的行设置动画,然后从Array / Realm中删除数据:)

这就是我在Swift和Realm v1.0.0中执行的操作

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        deleteRowAtIndexPath(indexPath)
    }
}

private func deleteRowAtIndexPath(indexPath: NSIndexPath)
{
    let realm = try! Realm()
    let objectToDelete = objects[indexPath.row]
    do {
        try realm.write() {
            realm.delete(objectToDelete)
        }
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    } catch {
        print("Could not delete site")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM