Xamarin.Forms TapGestureRecognizer在IOS中不起作用



我已经使用TapGestureRecognizer有一段时间了,我从一开始就遇到了这个问题(第一次在IOS设备上测试该应用程序时,由于某种原因,我在运行模拟器时遇到了问题,所以我一直在使用物理IOS设备(iPhone 12 Pro Max((,而且我的TapGesture Recognizer似乎没有在IOS设备上触发。在UWP上(我主要测试它,因为它是最快的(,我可以在我的应用程序上的选项卡等之间切换(我对所有按钮都使用TapGestureRecognizer(。

这里是一个更简单的例子,我可以在UWP中使用按钮,但不能在IOS上使用。

XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="fotbal.Oblibene" xmlns:viewModel="clr-namespace:fotbal;assembly=fotbal" xmlns:fotbal="clr-namespace:fotbal">
<Grid x:Name="Menu_Grid" />
</ContentPage>

CS:

Menu_Grid.ColumnSpacing = 30;
Menu_Grid.Margin = new Thickness(15, 0, 0, 0);
for (int i = 0; i < 5; i++) Menu_Grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
Menu_Grid.RowDefinitions.Add(new RowDefinition());
var page_switcher_tap_recognizer = new TapGestureRecognizer();
page_switcher_tap_recognizer.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};
int j = 0;
foreach (KeyValuePair<string, string> kvp in oblibene_categories)
{
Grid grid = new Grid
{
RowDefinitions = { new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(3) } },
ColumnDefinitions = { new ColumnDefinition() }
};
Label label = new Label { TextColor = Color.FromHex("#888888"), Text = kvp.Key, FontAttributes = FontAttributes.Bold, FontSize = 15, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
BoxView boxView = new BoxView { Color = Color.White };
if (kvp.Value == selected_category)
{
label.TextColor = Color.FromHex("#439564");
boxView.Color = Color.FromHex("#439564");
}
var label_page_switcher_tap_recognizer = new TapGestureRecognizer();
label_page_switcher_tap_recognizer.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};
label.GestureRecognizers.Add(label_page_switcher_tap_recognizer);
var boxview_page_switcher_tap_recognizer = new TapGestureRecognizer();
boxview_page_switcher_tap_recognizer.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};
boxView.GestureRecognizers.Add(boxview_page_switcher_tap_recognizer);
grid.Children.Add(label);
grid.Children.Add(new NeatFrame { Content = boxView, CornerRadius = 2 }, 0, 1);
var grid_page_switcher_tap_recognizer = new TapGestureRecognizer();
grid_page_switcher_tap_recognizer.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};
grid.GestureRecognizers.Add(grid_page_switcher_tap_recognizer);
Menu_Grid.Children.Add(grid, j, 0);
j++;
}

正如ToolmakerSteve所提到的,一个手势只能在一个视图上工作,不能为多个视图设置相同的手势。

因此,创建不同的手势,做同样的事情,然后逐个添加视图。

var page_switcher_tap_recognizer = new TapGestureRecognizer();
page_switcher_tap_recognizer.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};
var page_switcher_tap_recognizer2 = new TapGestureRecognizer();
page_switcher_tap_recognizer2.Tapped += (sender, e) =>
{
tab_switcher(sender, Menu_Grid, Oblibene_ScrollView);
};

label.GestureRecognizers.Add(page_switcher_tap_recognizer);
boxView.GestureRecognizers.Add(page_switcher_tap_recognizer2);

最新更新