当视图被弹出时,是否有iOS覆盖

本文关键字:是否 iOS 覆盖 视图 | 更新日期: 2023-09-27 17:59:38

我有一个MasterDetail应用程序和一个用于添加新项目的NavButton。我能够成功地弹出视图,但是我需要重新加载表,这很好。那么,我的MasterViewController如何准确地知道它是何时弹出的,以便重新加载呢?

这是流行代码:

NavigationController.PopViewController(true);

它的功能正如预期的那样,我只需要MasterViewController来重新加载表,我为它制定了一个方法:

public void ReloadTable()
{
    TableView.ReloadData ();
}

当视图被弹出时,是否有iOS覆盖

试试这个:

public partial class MasterViewController : UIViewController
{
    public void ReloadTable()
    {
        TableView.ReloadData ();
    }
}

public partial class DetailViewController : UIViewController
{
    public override void ViewWillDisappear (bool animated)
    {
        var masterViewController = NavigationController.ViewControllers.OfType<MasterViewController> ().FirstOrDefault();
        if (masterViewController != null) {
            masterViewController.ReloadTable ();
        }
        base.ViewWillDisappear (animated);
    }
}

您需要添加using System.Linq;才能获得OfType方法。

Objective-C

可以通过检查navigationController是否包含如下视图控制器来完成:

注意viewControllerA推送viewControllerB

现在在viewControllerB中使用viewWillDisappear方法

- (void)viewWillDisappear:(BOOL)animated
{
  if (![[self.navigationController viewControllers] containsObject: self]) //any other hierarchy compare if it contains self or not
  { 
    // the view has been removed from the navigation stack or hierarchy, back is probably the cause
    // this will be slow with a large stack however.
    viewControllerA *objViewControllerA = [[self.navigationController viewControllers] lastObject];
    //NSLog(@"%@",objViewControllerA);
    if (objViewControllerA)
    {
        [objViewControllerA viewPoppedBack];
    }
  }
}

现在addviewControllerA 中的一个method

 -(void)viewPoppedBack
 {
    //reload tableview here
    [yourTableViewHere reloadData];
 }