【问题标题】:Onappearing not working when modal page is popped in Xamarin iOS在 Xamarin iOS 中弹出模式页面时出现不工作
【发布时间】:2021-05-15 00:54:52
【问题描述】:

我有一个 onappearing 方法,当页面在 Xamarin iOS 中弹出时不会触发,但在 Xamarin Android 中可以正常工作。谁能帮我解决这个问题。谢谢。

第 1 页(标签页)

 protected override void OnAppearing()
    {
        base.OnAppearing();

            if (CVItems.SelectedItem != null)
                CVItems.SelectedItem = null;
    }

    private async void CVItems_SelectionChangedAsync(object sender, SelectionChangedEventArgs e)
    {
        var selecteditem = e.CurrentSelection.First() as Item;
        var detailPage = new AdPage(selecteditem);
        detailPage.BindingContext = selecteditem;
        await Navigation.PushModalAsync(detailPage);             
    }

第 2 页(模态页面)

    private async void poppage_Tapped(object sender, EventArgs e)
    {
        await Navigation.PopModalAsync();
    }

当点击集合视图中的项目时,会打开模态页面,然后当我弹回标签页时,不会触发 onappearing() 方法。

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.ios onappear


    【解决方案1】:

    您可以通过将 Xamarin Forms 的版本更新到最新版本来检查它是否有效。

    我已签入最新版本的 Xamarin Forms(5.0.0.1931) 和 iOS(14.4),无论 TabbedPageContentPage(TabbedPage 的子页面),它都能正常工作。

    基于this offical sample修改代码进行测试。

    • 第一步:按OnUpcomingAppointments按钮进入下一页。

    • 第二步:按返回按钮,然后返回SchedulePage

    标签页

    public partial class MainPage : TabbedPage
    {
        public MainPage ()
        {
            InitializeComponent ();
        }
    
        protected override void OnAppearing()
        {
            base.OnAppearing();
            Console.WriteLine("TabbedPage OnAppearing");
        }
    }
    

    计划页面

    public partial class SchedulePage : ContentPage
    {
        public SchedulePage ()
        {
            InitializeComponent ();
        }
    
        async void OnUpcomingAppointmentsButtonClicked (object sender, EventArgs e)
        {
            await Navigation.PushModalAsync (new UpcomingAppointmentsPage ());
        }
    
        protected override void OnAppearing()
        {
            base.OnAppearing();
            Console.WriteLine("SchedulePage OnAppearing");
        }
    }
    

    输出:

    2021-02-12 11:03:03.800726+0800 TabbedPageWithNavigationPageiOS[5537:75334] TabbedPage OnAppearing
    2021-02-12 11:03:03.801024+0800 TabbedPageWithNavigationPageiOS[5537:75334] SchedulePage OnAppearing
    

    【讨论】:

    • 是的,如果您正在导航到即将到来的约会页面,它会起作用,但如果您弹回日程安排页面,则不会触发 OnAppearing of Schedule 页面。你能帮我解决这个问题吗?谢谢。
    • @Sawan Okey,它适用于我的项目。您是否使用最新版本的 Visual Studio 和 Xcode?您也可以在此处更新示例项目链接,我将在我的本地站点中查看。
    【解决方案2】:

    请您展示您的代码示例吗?

    您可以尝试以下 try catch 来查看正在发生的任何错误:

    public void OnAppearing() //could add a protected override
    {
                try
                {
                    OnAppearing();
    
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine(Ex.Message);
                }
    }
    

    【讨论】:

    • 你能看看我编辑的问题吗?谢谢
    • 你试过 PopAsync 吗? xamarinhelp.com/navigating-xamarin-formsthis.Navigation.PopAsync(); this.Navigation.PopToRootAsync();或者,this.Navigation.RemovePage
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多