我使用两个视图控制器在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打开,我选择任何项目,例外)
答案 0 :(得分:4)
您Push,Pop
和Present,Dismiss
混淆了。
当将viewcontroller放入Navigation中时,你应该使用push和pop来控制堆栈。
修改您的代码:
backButton.TouchUpInside += (s,e) => {
this.NavigationController.PopViewController(true);
}
参阅
答案 1 :(得分:0)
如果您需要自动“返回”按钮,那么您需要从导航控制器开始,然后打开一个视图控制器......
在此链接中查看更多信息: https://developer.xamarin.com/guides/ios/getting_started/hello,_iOS_multiscreen/hello,_iOS_multiscreen_quickstart/
否则你需要制作一个按钮,只需使用与之前相同的方法!
问你是否理解不了!