使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态

问题描述 投票:0回答:2

在我的应用程序的一个阶段(Android和iOS是我们关心的那个)我们有三个页面接收详细信息然后打开webView以便用户输入他们的卡详细信息以进行付款 - 这不可能是由于Apple的指导原则在应用程序中完成。

我需要以一种方式格式化导航,当用户完成webView时,它会关闭,然后关闭之前的3个模态以返回到原始页面。我已经全部使用了Appearing事件,因此每个页面都会自行关闭:

this.Appearing += async (s, e) =>
{
    await Navigation.PopModalAsync();
};

我现在面临的问题是,当用户按下手机上的后退按钮时,它会关闭他们已经通过的所有页面并返回到原始页面。我考虑过实现自定义导航栏并禁用硬件上的后退按钮,但这会导致出现事件出现同样的问题。

有没有简单的方法来解决这个问题?

编辑:相关代码;

async void OnButtonClicked(object sender, EventArgs eventArgs)
    {
        if (IsConnected)
        {
            ActivityIndicator.IsVisible = true;
            var button = (Button) sender;
            button .IsEnabled = false;
            await Navigation.PushModalAsync(new Page());
            this.Appearing += (s, e) =>
            {
                ActivityIndicator.IsVisible = false;
                button.IsEnabled = true;
                RefreshPage();
            };
        }
        else
        {
            NoInternetLabel.IsVisible = true;
        }
    }
c# android ios navigation xamarin.forms
2个回答
0
投票

用这个:

YourButton.Clicked += OpenPage;

OpenPage看起来像这样:

async public void OpenPage(object sender, EventArgs args)
{
    await Navigation.PushAsync(new PageToShow());
}

您无需执行任何操作来处理PageToShow()关闭,当用户按下后退按钮时,这会自动发生。


0
投票

通过使用Actions来解决此问题。在每个新的Page()中,我们传递了一个异步方法,一旦完成之后关闭它;

var nextPage = new Page(async () => 
{ 
    await Navigation.PopModalAsync(); 
    _completedSuccessfully();
});
await Navigation.PushModalAsync(nextPage);

并在新的页面类;

private readonly Action _completedSuccessfully;
public Page(Action completedSuccessfully)
{        
    _completedSuccessfully = completedSuccessfully;
}

这意味着当webView关闭时,它调用completedSuccessfully()动作,然后将所有这些动作链接到原始页面。

© www.soinside.com 2019 - 2024. All rights reserved.