iOS 全球不支持 PushAsync,请使用 NavigationPage
Posted
技术标签:
【中文标题】iOS 全球不支持 PushAsync,请使用 NavigationPage【英文标题】:PushAsync is not supported globally on iOS, please use a NavigationPage 【发布时间】:2017-12-19 23:05:30 【问题描述】:当我处理 ListView
项目的 Tap 事件时,一切正常,但是当我在 TabbedPage
中使用它时,它会显示异常,请提前提供此问题的解决方案。
例外:ios 不支持 PushAsync,请使用 NavigationPage。
这是 Xaml 代码:
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:NavTest" x:Class="NavTest.NavTestPage" Title="Home">
<ContentPage.Content>
<StackLayout Orientation="Vertical" VerticalOptions="Center">
<Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" />
<!--<Button Text="Go to " BackgroundColor="Lime" VerticalOptions="Center" Clicked="Handle_Clicked" >
</Button>-->
<ListView x:Name="myListView" ItemSelected="Handle_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="Binding" VerticalOptions="Center" HorizontalOptions="Center" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
这是 OnClick 处理程序:
async void Handle_Clicked(object sender, System.EventArgs e)
await Navigation.PushAsync(new Page1());
【问题讨论】:
您的 ContentPage 是否包含在 NavigationPage 中? 欢迎来到 Stack Overflow!我更改了一些格式以帮助更好地阅读问题。 我有一个标签页,其中的内容是一个列表视图,我想在标签页列表项点击事件上打开一个新的导航页?? 【参考方案1】:仅在 iOS 中运行时会出现此错误。
在 App.cs Rootpage(Start page) 中给出如下所示
public App()
MainPage=new NavigationPage(new LoginPage());
现在,我们可以在 Globally 中使用 PushAsyn()
【讨论】:
即使在 android 中也不使用导航页面也会发生同样的错误 还有 UWP。'PushAsync is not supported globally on Windows, please use a NavigationPage.'
这个答案也是正确的答案,因此删除“仅在 iOS 中运行”可能是安全的。【参考方案2】:
您的App.xaml.cs
中可能有一些类似于此的代码:
public App()
InitializeComponent();
var tabs = new TabbedPage();
tabs.Children.Add(new NavTestPage() Title = "Tab title" );
MainPage = tabs;
你应该改成哪个:
public App()
InitializeComponent();
var tabs = new TabbedPage();
var page = new NavTestPage() Title = "Page title" ;
tabs.Children.Add(new NavigationPage(page) Title = "Tab title" );
MainPage = tabs;
通过包装NavigationPage
,您可以选择将页面推送到导航堆栈。 TabbedPage
本身只是标签,每个标签只有 1 页。这应该给你一个这样的结构:
TabbedPage
NavigationPage
ContentPage
NavigationPage
ContentPage
NavigationPage
ContentPage
更新:
我猜你正在做的只是在你的 XAML 中将 ContentPage
更改为 TabbedPage
。 TabbedPage
不是这样工作的。您可能应该首先阅读 TabbedPage
的实际工作原理。
https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/tabbed-page/
在您的情况下,您可能应该创建一个具有这样 XAML 的新页面:
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:NavTest"
x:Class="NavTest.MyTabbedPage">
<NavigationPage Title="NavTest">
<x:Arguments>
<local:NavTestPage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
将此设置为App.xaml.cs
中的MainPage
:
public App()
InitializeComponent();
MainPage = new MyTabbedPage();
【讨论】:
我有一个标签页,其中的内容是一个列表视图,我想在标签页列表项点击事件上打开一个新的导航页??【参考方案3】:您应该将 TabbedPage 子页面放入 NavigationPage。以下是 Xamarin 文档中的代码 sn-ps。
在 Xaml 中:
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage"
x:Class="TabbedPageWithNavigationPage.MainPage">
<local:TodayPage />
<NavigationPage Title="Schedule" Icon="schedule.png">
<x:Arguments>
<local:SchedulePage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
或在代码中:
public class MainPageCS : TabbedPage
public MainPageCS ()
var navigationPage = new NavigationPage (new SchedulePageCS ());
navigationPage.Icon = "schedule.png";
navigationPage.Title = "Schedule";
Children.Add (new TodayPageCS ());
Children.Add (navigationPage);
【讨论】:
【参考方案4】:在此错误中,它会找到根页面,如果我们使用的是主详细信息页面,那么我们必须仅为详细信息页面设置导航。因此,以下将是解决此问题的最佳解决方案。
((RootPage)Application.Current.MainPage).Detail.Navigation.PushAsync(new SearchPage());
【讨论】:
以上是关于iOS 全球不支持 PushAsync,请使用 NavigationPage的主要内容,如果未能解决你的问题,请参考以下文章
Android 全球不支持 PushAsync,请使用 NavigationPage
Xamarin.Forms - Android 全球不支持 PushAsync,请使用 NavigationPage
System.InvalidOperationException:PushAsync 在 Android 上不受全球支持