我有一个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};
}
这不会执行任何操作,也不会将详细信息视图更改为新视图。我该如何实现呢?
答案 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);
}