在Master View控制器项目上更改Detail View控制器单击UISplitViewController

时间:2017-05-15 09:49:21

标签: ios uiviewcontroller xamarin.ios uisplitviewcontroller detailview

我有一个UISplitViewController,带有一个主视图控制器,它是一个表和一个详细视图控制器。

我已经实现了它: -

MainViewController.cs

$userInstance = "'" + "Get-ADUser -Filter { CN -eq " + "'" + $_.userInstance + "'" + " } -Properties *" + "'";
$path = $_.Path;
 #create user
New-ADUser -SAMAccountName $_.SAMAccountName -Instance $userInstance -Name $_.name -DisplayName $_.displayName -Path "OU=$Path" -GivenName $_.givenname -Surname $_.surname -userPrincipalName $_.userprincipalname -AccountPassword (ConvertTo-SecureString -String $_.Password -AsPlainText -Force) -PassThru | Enable-ADAccount;

这很好用。现在,当用户单击主视图控制器中的行时,我想将详细视图控制器更改为另一个控制器。

我所做的是: -

    public override void ViewDidLoad()
    {
       UpdateView(masterVC,detailVC);
    }
    public void UpdateView(UIViewController master, UIViewController detail)
   {
       this.ViewControllers = new ViewControllers[]{master, detail};
   }

这不会执行任何操作,也不会将详细信息视图更改为新视图。我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

您重新实例化主视图控制器,而不是提供指向应用程序启动时加载的原始图像的指针,因为就应用程序而言,只需更新“#master”的详细信息视图&# 39;查看控制器只能坐在内存中。

在MainViewController ViewDidAppear方法中启动应用程序时,像这样创建一个静态引用:

public static MainViewController MVCPointer {get; private set;}

public override void ViewDidAppear(bool animated)
{
    base.ViewDidAppear(animated);

    MVCPointer = (self as MainViewController).
}

然后在行选中,您将执行以下操作:

public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
       var mainVC = StoryBoard.InstantiateViewController("Main_VC") as MainViewController;
       mainVC.MVCPointer.UpdateView(mainVC.MVCPointer, newDetailVc);
}

有很多更简洁的方法可以做到这一点,上面只是一种快速调整当前代码的方法,我个人在AppDelegate内部的静态变量中存储了对任何导航控制器的引用,所以我可以在任何地方访问它,但是#39;如果您的应用程序包含许多不同的视图控制器和导航控制器,则它们非常有用。

执行所需操作的另一种方法是将mainviewcontroller的引用传递给tableviewsource类(如果使用的话)

你可以这么简单地做到:

private static MainViewController MVCMain {get ; private set}

public void nameofyourtableviewsource (object tableviewdata, MainViewController cont)
{
      MVCMain = cont;
}

public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
      (mainVC.ViewControllers[0] as MainViewController).UpdateView(mainVC, newDetailVc);
}