iPhone setDelegate для ранее выделенного объекта - PullRequest
0 голосов
/ 05 августа 2011

Я пытаюсь настроить протоколы и делегирование.

У меня проблема с тем, что я хочу установить делегат для ранее выделенного объекта.

Объект, для которого я выделяю потребностиделегировать к протоколу.Как это сделать?

Вот мой код.

// SendSMS.h

@protocol ModalViewDelegate

- (void)didReceiveMessage:(NSString *)message;

@end

@interface SendSMS : UIViewController <UITextViewDelegate, UITextFieldDelegate> {


    MessageOptions *messageOptions;
    LoginPage *loginPage;
    IBOutlet UITextField *phonenumber;
    IBOutlet UITextView *smsBody;
    IBOutlet UIScrollView *scrollview;

}

-(IBAction)LoadMessageOptions;

@end

Проблема в том, что объект помещается в стек.Его делегат не принадлежит самому себе.но это объекта перед ним.

Любые идеи?

ОБНОВЛЕНИЕ!

Хорошо, мне удалось установить мой делегат на [self.navigationController.viewControllers objectAtIndex:0], который является контроллером rootview.Но у меня есть 3 предупреждения о том, что методы не найдены в протоколах.Который они .... Но он компилирует работает и работает.

1 Ответ

2 голосов
/ 05 августа 2011

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

  1. View1 - корневой контроллер, он создает и выдвигает;
  2. View2, которые делают что-то, а затем создают и толкают;
  3. View3, который хочет отправить некоторые результаты тому, кто заинтересован.

Я вижу два возможных решения.

Решение 1 - Делегаты

  1. Пусть View3 объявит протокол делегата View3Delegate.
  2. Пусть View1 соответствует View3Delegate.
  3. Когда View1 создает и толкает View2, также передайте его self, чтобы удержать.
  4. Когда View2 создает и толкает View3, также устанавливает делегата, который был передан на шаге 3.
  5. Когда View3 хочет отправить свой результат, позвоните делегату и будьте счастливы.

Решение 2 - Уведомления

Это, вероятно, более элегантное решение в вашем случае, так как предыдущее решение имеет дополнительный шаг, где View2 необходимо обрабатывать вещи только для того, чтобы заставить View1 и View3 работать, не связанные с его реальными обязанностями. .

  1. Пусть View3 объявит уведомление с именем View3ResponseNotification.
  2. Пусть View1 соблюдает уведомления об имени View3ResponseNotification.
  3. View1 создает и толкает View2 без забот.
  4. View2 создает и толкает View3 без забот.
  5. Когда View3 хочет отправить свои результаты, он отправляет уведомление View3ResponseNotification.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...