Я обнаружил ограничение отображения подсказок, когда они вызываются из всплывающего окна. Специально проверено с помощью CommunityToolkit.Maui
всплывающих окон.
Вот подробности:
На странице карты у меня есть этот обработчик для события нажатия карты:
void mapClicked(object sender, MapClickedEventArgs e) {
var pin = new Pin {
Label = "Here's where it is",
Location = e.Location
};
map.Pins.Add(pin);
}
Я хотел разрешить пользователю редактировать метку булавки при нажатии на нее, например:
pin.InfoWindowClicked += async (s, args) => {
string pinName = ((Pin)s).Label;
await DisplayPromptAsync("Enter new label", "enter new label");
};
Однако это не сработало, так как DisplayPrompt
не было показано. Пробовал запускать в основном потоке, тоже безрезультатно.
ОБНОВЛЯТЬ. Я понял это, смотрите ответ ниже.
Да, это вызывается, потому что я получаю от этого Debug.WriteLine
.
этот код работает для меня в XF5 на iOS 16.1
Спасибо, вы имеете в виду, что появляется DisplayPromptAsync? Это Shell.Current.DisplayPromptAsync? (Кстати, я использую MAUI .NET 7).
Я не использую оболочку. Но появилась подсказка, и метка булавки на карте обновилась.
Я думаю, что обнаружил проблему, но я не уверен, как ее решить. Я открываю карту во всплывающем окне (CommunityToolkit.Maui.Views.Popup), и у него нет собственного метода DisplayPromptAsync, поэтому я вызывал для него Shell.Current. Что не работает, видимо. Поэтому мне пришлось бы использовать DisplayPromptAsync из родительского окна (того, из которого я вызвал всплывающее окно), но я не знаю, как к нему добраться.
Shell.Current
должен вернуть текущую отображаемую страницу. Но может оказаться невозможным отобразить DisplayPrompt поверх всплывающего окна.
Эх... Похоже на то.
Проблема возникает при попытке вызвать подсказку из всплывающего окна. Очевидно, нельзя иметь DisplayPromptAsync
(или DisplayAlert
, если уж на то пошло) поверх всплывающего окна.
На уровне платформы в iOS
сообщение об ошибке гласит:
Attempt to present <UIAlertController> on <Microsoft_Maui_Controls_Platform_Compatibility_ShellFlyoutRenderer> (from <Microsoft_Maui_Controls_Platform_Compatibility_ShellFlyoutRenderer>) which is already presenting <CommunityToolkit_Maui_Core_Views_MauiPopup>.
Вы уверены, что ваш обработчик событий вызывается?