Objective- C: передача данных между двумя неподключенными контроллерами представления - PullRequest
0 голосов
/ 01 мая 2020

У меня есть ViewController A с UILabel и ViewController B с button, поэтому я хочу обновить метку после нажатия кнопки. Я мог бы использовать для этого делегатов, но мои ViewControllers не подключены, и я не могу использовать что-то вроде setDelegate, я не создаю ни одного экземпляра одного в другом. Так что в основном они созданы где-то еще. Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Использовать шаблон координатора.

Класс, который создаст / получит 2 экземпляра обоих VC, и с делегатами переместит данные между ними. Преимущество шаблона Coordinator заключается в том, что ваши виртуальные каналы могут быть повторно использованы в других местах (в том же или другом проекте), а также код становится чище.

0 голосов
/ 06 мая 2020

Чтобы развернуть ответ Апспери:

Способ уведомления об изменении контроллера представления: В контроллере представления с кнопкой на кнопке нажмите вызов:

 [[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" 
  object:self userInfo:nil];

Затем в представлении загрузки или просмотра исчезнет Метод контроллера представления метки поместите «получатель» для уведомления:

  [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(mymethotochangetext) name:@"refresh" object:nil];

Метод NSUserDefault:

В контроллере представления с помощью кнопки сохраните NSUserDefualt:

   [[NSUserDefaults standardUserDefaults] setObject:somestring 
      forKey:@"myuniquekeyname"];
    [[NSUserDefaults standardUserDefaults] synchronize];

Затем в контроллере представления с меткой вы можете получить сохраненную строку при загрузке представления и поместить ее в текстовое поле:

    self.label.text=[[NSUserDefaults standardUserDefaults] 
     stringForKey:@"myuniquekeyname"];
0 голосов
/ 01 мая 2020

Вариант 1: , если время жизни ControllerA и ControllerB отличается

Использовать NSUserDefaults. При нажатии кнопки ControllerB сохранить данные в NSUserDefaults, в ControllerA прочитать данные из NSUserDefaults и показать в метке (NSUserDefaults также можно наблюдать, поэтому можно отслеживать изменения во время выполнения)

Вариант 2: , если ControllerA и ControllerB оба в настоящий момент находятся во время выполнения

Use NSNotificationCenter. При нажатии кнопки ControllerB отправьте NSNotification с данными в userInfo, а ControllerA в обработчике уведомлений извлекает данные из userInfo и назначает метке.

...