Skip to main content
 首页 » 编程设计

c#之如何在 Xamarin.IOS 中返回到之前的 ViewController

2024年01月29日55linjiqin

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

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

但我不知道如何以编程方式返回到第一个 ViewController - 例如 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 时,它在

this.NavigationController.PushViewController(detailController, true); 

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

请您参考如下方法:

你把 Push,PopPresent,Dismiss 搞混了。

当viewcontroller 放在Navigation 里面时,应该使用push 和pop 来控制堆栈。

修改代码:

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

引用

Presenting a View Controller

UINavigationController