如何回到Xamarin.IOS中的上一个ViewController

时间:2017-12-14 08:27:42

标签: c# xamarin xamarin.ios

我使用两个视图控制器在VisualStudio Xamarin(不是Xamarin.Forms )中制作应用程序。第一个视图控制器是项目列表,第二个视图包含项目的详细信息。当用户点击列表中的项目时,将打开第二个视图,其中包含代码

DetailViewController detailController = this.Storyboard.InstantiateViewController("DetailViewController") as DetailViewController;
detailController._idx = idx;
this.NavigationController.PushViewController(detailController, true);

但我不知道如何以编程方式返回第一个ViewController - 例如,有按钮" Go Back"在DetailViewController上 我尝试使用这段代码:

backButton.TouchUpInside += (s,e) => {
  this.NavigationController.DismissViewController(true, null)
};

但它没有给出任何结果。 有人可以帮我吗?

已更新

我将代码更改为:

backButton.TouchUpInside += (s,e) => {
  this.NavigationController.DismissViewController(true, async () => { await DismissViewControllerAsync(true); });
  ListViewController listController = this.Storyboard.InstantiateViewController("ListViewController ") as ListViewController;
  this.NavigationController.PresentViewController(listController, true, null);
} 

这项工作用于"返回",但当我尝试在列表中选择相同或其他项目并打开新的DetailViewController时,它会抛出异常" System.NullReferenceException:对象引用未设置为对象的实例"在

this.NavigationController.PushViewController(detailController, true);

(详情 - 我运行app,ListViewController打开,我选择item1,DetailViewController打开,我点击BackButton,ListViewController打开,我选择任何项目,例外)

2 个答案:

答案 0 :(得分:4)

Push,PopPresent,Dismiss混淆了。

当将viewcontroller放入Navigation中时,你应该使用push和pop来控制堆栈。

修改您的代码:

backButton.TouchUpInside += (s,e) => {
  this.NavigationController.PopViewController(true); 
} 

参阅

Presenting a View Controller

UINavigationController

答案 1 :(得分:0)

如果您需要自动“返回”按钮,那么您需要从导航控制器开始,然后打开一个视图控制器......

在此链接中查看更多信息: https://developer.xamarin.com/guides/ios/getting_started/hello,_iOS_multiscreen/hello,_iOS_multiscreen_quickstart/

否则你需要制作一个按钮,只需使用与之前相同的方法!

问你是否理解不了!