![](/img/trans.png)
[英]problems with animation when deleting the last row of a TableView in ios7
[英]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.