【发布时间】:2022-01-20 03:29:10
【问题描述】:
我使用 TapGestureRecognizer 已经有一段时间了,我从一开始就遇到了这个问题(我第一次在 IOS 设备上测试应用程序时,由于某种原因我在运行模拟器时遇到了问题,所以我一直在使用一个物理 IOS 设备(iPhone 12 Pro Max)),似乎我的 TapGestureRecognizer 没有在 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++;
}
【问题讨论】:
-
这能回答你的问题吗? Can you attach a UIGestureRecognizer to multiple views?。在 iOS 上,您必须为每个视图创建一个新识别器。您不能将 page_switcher_tap_recognizer 附加到多个视图。
-
@ToolmakerSteve 嗨,我已经尝试过了,但是遇到了同样的问题。
-
除非您显示您尝试过的确切代码,否则任何人都无法帮助您找出它不起作用的原因。
-
@ToolmakerSteve 抱歉,我已经更新了问题
-
代码看起来不错。您是否从构造函数调用该代码?作为测试,将循环中的整个代码替换为 boxview (
Menu_Grid.Children.Add(boxview, j, 0);) 及其点击识别器。 (循环中每个元素没有网格)查看是否在 iOS 上响应。
标签: c# xamarin.forms uitapgesturerecognizer