Как распространять изменения при обратной навигации в android и ios? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть приложение Xamarin.Android и Xamarin.iOS.В приложении есть модель данных, которая называется PRODUCT.На разных экранах мы будем перечислять продукты в зависимости от запросов или других критериев.Допустим, пользователь перешел из Activity-A (ViewController в ios) к Activity-B и далее в C, D и т. Д., Выбрав определенный продукт.Основываясь на взаимодействии с пользователем в Activity-D, мне нужно обновить пользовательский интерфейс во всех других действиях при переходе назад от D к A.Как я могу распространить изменения вниз по стеку или как соответствующим образом обновить пользовательский интерфейс при переходе назад.Определенное действие может содержать элемент пользовательского интерфейса непосредственно в нем, а в других местах - его часть списка.Продукт будет иметь уникальный идентификатор.

1 Ответ

0 голосов
/ 10 декабря 2018

Решение:

Для Xamarin.iOS:

Существует несколько способов передачи данных между ViewControllers.Здесь я рекомендую вам использовать NSNotificationCenter в вашем случае.Например, если вы хотите изменить A,B,C's пользовательский интерфейс при выполнении какого-либо заданного действия в D, вы можете использовать следующий код:

В контроллере D: опубликовать Notification в своемукажите действие, вы можете добавить свои личные требования (например: идентификатор продукта, стиль пользовательского интерфейса) в словарь (третий параметр):

NSNotificationCenter.DefaultCenter.PostNotificationName("changeUI",null, new NSDictionary("key1", 1, "key2", 2));

В контроллере A,B,C, зарегистрироваться в качестве наблюдателя Notification с именем changeUI.

 NSObject notificationToken;
    void Setup()
    {
        notificationToken = NSNotificationCenter.DefaultCenter.AddObserver((NSString)"changeUI", doChangeUI);
    }

    void doChangeUI(NSNotification notification)
    {
        NSDictionary dict = notification.UserInfo;
        Console.WriteLine("changeUI");
    }

    void Teardown()
    {
        NSNotificationCenter.DefaultCenter.RemoveObserver(notificationToken);
    }

Итак, когда контроллер D отправит Notification с именем changeUI, все наблюдатели получат Notification и выполнят предопределенную функцию (Вот doChangeUI).Вы можете получить свои личные требования в dict (notification.UserInfo) и обновить пользовательский интерфейс в контроллерах.

Вы можете обратиться: NSNotificationCenter

ДляXamarin.Android:

Вы можете использовать Broadcast-Receivers в Xamarin.Android.Это почти то же самое, что NSNotificationCenter в Xamarin.iOS.

1. Создание Broadcast Receiver в Деятельности A,B,C;

2.Публикация Broadcast в Деятельности D;

3. Делайте ваши вещи, когда вы получили трансляцию

Более подробно вы можете обратиться к документу: Приемники трансляции

...