繁体   English   中英

取消模式后,iOS TableView重新加载

[英]iOS TableView Reload after dismissing modal

在我的应用程序中,我在表格视图中列出了核心数据条目。 我想允许用户使用以表单视图形式呈现的详细视图来编辑记录。 编辑记录时,我观察到异常行为。

流程:

  1. 用户使用记录加载tableview。 - 工作
  2. 用户选择一条记录进行编辑。 - 工作
  3. 用户在显示为模态表单视图的视图控制器中编辑记录。 - 工作
  4. 用户保存编辑并关闭表单视图。 - 工作
  5. Tableview显示了先前编辑记录的正确更改。 - 工作
  6. 用户重复步骤2-4,选择其他记录进行编辑。 - 工作
  7. Tableview显示所有记录的正确数据。 -不工作。

在步骤7,表格视图将第一个已编辑记录的显示恢复为其原始状态。 后续的记录编辑将导致所有先前的编辑恢复为原始状态。 如果关闭并重新加载了tableview,则记录是正确的,显示所有编辑。

我在tableview的ViewWillAppear方法中使用了[tableview reload],但是当关闭模式窗体视图控制器时,似乎没有被触发。

在我的tableviewcontroller代码中:

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

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

谢谢!

呈现模式视图时,主视图控制器的视图永远不会消失。 因此,关闭模态视图后,将不会调用viewWillAppear()。

您可以尝试在模式视图中实现自定义委托函数,然后在主视图控制器中进行设置,当数据更新时,触发委托函数以重新加载位于主viewController的tableView。

了解什么是iOS中的委托函数,以及

如何创建委托函数是这样的:

  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中,您将得到一条警告,提示您需要实现已经声明的委托函数。 因此,设置委托函数,然后执行您想做的事情:

- (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM