在 iOS 中,realm 是否支持在带动画的 tableview 中删除一行?
In iOS does realm support deleting a row in a tableview with animation?
例如,这是我关于删除表视图行的以下代码。
// 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 中实现动画的实际方法
[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")
}
}
例如,这是我关于删除表视图行的以下代码。
// 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 中实现动画的实际方法
[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")
}
}