0

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

流量:

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

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

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

在我的 tableviewcontroller 代码中:

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

环顾四周,我还没有找到解决方案,希望有人能指出我正确的方向。

谢谢!

4

2 回答 2

4

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

您可以尝试在模态视图中实现自定义委托函数,并将其设置在主视图控制器中,当您的数据更新时,触发委托函数以重新加载您的主视图控制器中的 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;
于 2014-07-03T04:21:45.203 回答
0

触发模态视图控制器时使用完成块:

-(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];
    }];
}
于 2014-07-03T04:06:26.880 回答