![](/img/trans.png)
[英]Swift - Reload TableView After Dismissing Modal ViewController
[英]iOS TableView Reload after dismissing modal
在我的应用程序中,我在表格视图中列出了核心数据条目。 我想允许用户使用以表单视图形式呈现的详细视图来编辑记录。 编辑记录时,我观察到异常行为。
流程:
在步骤7,表格视图将第一个已编辑记录的显示恢复为其原始状态。 后续的记录编辑将导致所有先前的编辑恢复为原始状态。 如果关闭并重新加载了tableview,则记录是正确的,显示所有编辑。
我在tableview的ViewWillAppear方法中使用了[tableview reload],但是当关闭模式窗体视图控制器时,似乎没有被触发。
在我的tableviewcontroller代码中:
-(void)viewWillAppear:(BOOL)animated
{
[self.tableView reloadData];
}
到处搜寻,我还没有找到解决方案,希望有人能指出我正确的方向。
谢谢!
呈现模式视图时,主视图控制器的视图永远不会消失。 因此,关闭模态视图后,将不会调用viewWillAppear()。
您可以尝试在模式视图中实现自定义委托函数,然后在主视图控制器中进行设置,当数据更新时,触发委托函数以重新加载位于主viewController的tableView。
了解什么是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;
触发“模态”视图控制器时,请使用完成块:
-(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];
}];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.