在我的应用中,我在tableview中列出了核心数据条目。我想允许用户使用模态显示的详细视图作为表单视图来编辑记录。我正在观察编辑记录时的特殊行为。
流程:
在第7步,tableview会将第一个已修改记录的显示恢复为原始状态。后续记录编辑导致所有先前的编辑恢复到其原始状态。如果取消并重新加载tableview,则记录正确,显示所有编辑。
我在tableview的ViewWillAppear方法中使用了[tableview reload],但是当模式窗体视图控制器被关闭时似乎没有触发它。
在我的tableviewcontroller代码中:
-(void)viewWillAppear:(BOOL)animated
{
[self.tableView reloadData];
}
四处寻找,我还没有找到解决方案,希望有人能指出我正确的方向。
谢谢!
答案 0 :(得分:4)
当您呈现模态视图时,主视图控制器的视图永远不会消失。因此,在您关闭模态视图后,不会调用viewWillAppear()。
您可以尝试在模态视图中实现自定义委托函数,并在主视图控制器中设置它,当您的数据更新时,触发委托函数重新加载tableView,它位于您的主viewController。
了解iOS中的委托功能,以及
如何创建委托函数是这样的:
在你的ModalView.h中:
// define the protocol for the delegate
@protocol ModelViewDelegate <NSObject>
- (void) didUpdateData;
@end
@interface ModalView: ViewController {
//create a delegate instance
id delegate;
}
// define delegate instance
@property (nonatomic, assign) id <ModelViewDelegate> delegate;
在你的modalView.m中:
@synthesize delegate;
然后在函数内部,将委托函数放在需要触发的位置,例如:
- (void) updateDataIntoDatabase{
....
//Update work done.
[self.delegate didUpdateData];
//dismiss your modalView;
}
因此,在MainViewController.h中,
#import ModalView.h
和
@interface ModalView: ViewController <ModelViewDelegate > {
...
}
在MainViewController.m中,您将收到一条警告,说明您需要实现已声明的委托函数。因此,设置委托功能,并执行您喜欢的操作:
- (void) didUpdateData{
[self.tableView reloadData];
}
在实例化modalView实例后,忘记将modelView委托设置为self。如果不是你的代表职能不会被解雇。
modalView.delegate = self;
答案 1 :(得分:0)
触发Modal viewcontroller时使用完成块:
-(void)editModal:(id)sender
{
KDSecondViewController *secondVC = [[KDSecondViewController alloc] init];
[self presentViewController:secondVC animated:YES completion:^{
//-- reload your table view when user dismiss the modal view
[self.tableView reloadData];
}];
}