iOS TableView解散模态后重新加载

在我的应用程序中,我列出了tableview中的核心数据条目。 我想允许用户使用以模态方式呈现的详细视图作为表单视图来编辑logging。 编辑logging时,我正在观察特殊的行为。

stream程:

  1. 用户用logging加载tableview。 -加工
  2. 用户select一条logging进行编辑。 -加工
  3. 用户将视图控制器中的logging编辑为模态窗体视图。 -加工
  4. 用户保存编辑并解除表单视图。 -加工
  5. 表视图显示以前编辑的logging的正确更改。 -加工
  6. 用户重复步骤2 – 4select一个不同的logging进行编辑。 -加工
  7. Tableview显示所有logging的正确数据。 不工作。

在步骤7,表格视图将第一个编辑logging的显示恢复到其原始状态。 后续的logging编辑会导致以前的所有编辑恢复到原始状态。 如果tableview被解散并重新加载,logging是正确的,显示所有的编辑。

我已经在tableview的ViewWillAppear方法中使用了[tableview reload],但是当模态表单视图控制器被解散时,似乎没有被触发。

在我的tableviewcontroller代码中:

-(void)viewWillAppear:(BOOL)animated { [self.tableView reloadData]; } 

到处寻找,我还没有find解决办法,希望有人能指出我正确的方向。

谢谢!

当你呈现模态视图时,主视图控制器的视图永远不会消失。 所以,在解散模态视图后,viewWillAppear()将不会被调用。

你可以尝试在你的模式视图中实现一个自定义的委托函数,并将其设置在主视图控制器中,当你的数据更新时,触发委托函数来重新加载你的主视图控制器的tableView。

了解什么是委托function在iOS中,和

如何创build一个委托function是这样的:

  1. 在你的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; 
  2. 在你的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中,你会得到一个警告,说你需要实现你已经声明的委托函数。 所以,设置委托function,并做你喜欢做的事情:

 - (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]; }]; }