iOS TableView解散模态后重新加载
在我的应用程序中,我列出了tableview中的核心数据条目。 我想允许用户使用以模态方式呈现的详细视图作为表单视图来编辑logging。 编辑logging时,我正在观察特殊的行为。
stream程:
- 用户用logging加载tableview。 -加工
- 用户select一条logging进行编辑。 -加工
- 用户将视图控制器中的logging编辑为模态窗体视图。 -加工
- 用户保存编辑并解除表单视图。 -加工
- 表视图显示以前编辑的logging的正确更改。 -加工
- 用户重复步骤2 – 4select一个不同的logging进行编辑。 -加工
- 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是这样的:
-
在你的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中,你会得到一个警告,说你需要实现你已经声明的委托函数。 所以,设置委托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]; }]; }