繁体   English   中英

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

[英]How to go back to previous ViewController in Xamarin.IOS

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

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

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

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);

(详细信息-我运行应用程序,打开ListViewController,选择item1,打开DetailViewController,点击BackButton,打开ListViewController,选择任何项目,异常)

您混合了“ Push,Pop和“ Present,Dismiss

将viewcontroller放置在Navigation中时,应使用push和pop来控制堆栈。

修改您的代码:

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

参考

呈现视图控制器

UINavigationController

如果您需要“后退”按钮来自动出现,则需要从导航控制器开始,然后从那里打开一个viewcontroller ...

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

否则,您需要做一个butten,只需使用与以前相同的方法即可!

询问您是否不理解!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM