Как установить делегата для другого ViewController? - PullRequest
1 голос
/ 21 апреля 2011

Я недавно начал разрабатывать для iPhone, и до сих пор я неплохо справляюсь, но есть базовый шаблон, который мне, похоже, не подходит.

Скажем, у меня есть TabBar с двумя представлениямии пользовательский протокол делегирования, таким образом, моя структура выглядит следующим образом:

  • AppDelegate.h / .m
  • myDelegateProtocol.h
  • FirstViewController.h / .m
  • SecondViewController.h / .m
  • MainView.xib
  • FirstView.xib
  • SecondView.xib

Теперь я хочучтобы добиться следующего: я поместил кнопку в FirstView.xib и хотел бы, чтобы IBAction, который он вызывает (внутри FirstViewController ofc.), отправлял сообщение SecondViewController ([self.delegate tellSecondViewContrToSayHi]) и вызывал другой метод, которыйпросто печатает журнал в консоль со словами «привет, я здесь».

Пока я знаю, что мне нужно сделать в теории:

  1. Укажите протокол.
  2. Реализация протокола в SecondViewController.
  3. Создайте id делегата внутри моего FirstViewController, ... И последнее, но не менее важное:
  4. Установите self.delegate = secondViewControllerObject.

Теперь, номер 4, где проблема.Как же я могу связать делегата с другим viewController?Я имею в виду, что я не тот, кто создает экземпляры представлений, поскольку tabBar вроде как делает это для меня, ... какой-нибудь совет?Или я просто слишком устал, чтобы замечать действительно глупую вещь, которую я где-то сделал?

Теоретически тот же вопрос относится и к цели: действие: вещь, ... Я имею в виду, как определить цель?

Большое спасибо, васаби

1 Ответ

2 голосов
/ 21 апреля 2011

Вы имеете правильную идею, предполагая, что вы хотите относительно жесткую связь между этими контроллерами через этот протокол делегата.

Поскольку ни один контроллер не знает о другом, пока не установлено это свойство делегата, вам необходим некоторый объект,имеет ссылку на них обоих связать эти отношения.В вашем случае это, вероятно, делегат приложения, который может создавать оба контроллера, устанавливать один в качестве делегата другого и передавать их вместе вашему контроллеру панели вкладок.

То, что вы на самом деле хотите, это иметь делегата приложениядать обоим контроллерам ссылку на некоторый общий объект модели.Ваш FirstViewController может обновить эту модель, когда вы нажимаете на кнопку, и ваш SecondViewController может наблюдать изменения в модели, чтобы обновить ее отображение (или просто обновить ее представление, когда оно появляется на основе текущего состояния модели).Таким образом, вашим контроллерам не нужно ничего знать друг о друге.

...