2010-10-08 5 views
0

В моем приложении, основанном на навигации, есть кнопка, которая при нажатии изменит представление на detailViewController. Здесь пользователь может установить несколько параметров. Одним из таких опций является значение bool. Когда я вернусь из detailViewController, как я могу узнать, что это за значение bool?Каков наилучший способ получить значение bool от элемента detailViewController?

ответ

4

Создайте protocol (DetailViewDelegate?) И создайте объект delegate в вашем DetailViewController. Когда вы создаете экземпляр своего контроллера представления, установите для свойства delegate значение self и используйте это свойство для отправки сообщений обратно в контроллер основного вида. Единственная сложная часть заключается в том, что вам нужно объявить свойство delegate как «назначить», чтобы вы не создавали цикл сохранения между вашим подробным представлением и основным видом.


DetailViewController.h:

@class DetailViewController; // Forward Declaration. 
@protocol DetailViewDelegate 
- (void)detailViewController:(DetailViewController *)controller didChangeBool:(BOOL)theBool; 
@end 

@interface DetailViewController : UIViewController { 
    id <DetailViewDelegate> delegate; 
} 

@property (assign) id <DetailViewDelegate> delegate; 

@end 

Вот только интерфейс, но вы должны получить большую часть пути туда. Задайте свойство delegate с детальным представлением и реализуйте метод detailViewController:didChangeBool: в вашем основном представлении, и это все.


Чтобы ответить на вопросы в своем комментарии:

  1. Да. Перед тем, как вы нажмете регулятор контроллера детали, его значение delegate - self.
  2. Вам необходимо объявить, что ваш главный контроллер просмотра реализует протокол DetailViewDelegate. Узнайте, как это сделать, прочитав Apple's Documentation.
  3. После того, как вы заявите, что ваш мастер-контроллер будет реализовывать протокол, вам необходимо его реализовать. Добавьте метод detailViewController:didChangeBool: к вашему контроллеру главного представления.
+0

Можете ли вы показать какой-то код о том, как это сделать? –

+0

Какова цель этой второй строки? Это действительно необходимо? Я получаю сообщение об ошибке «Ожидаемое») «до detailViewController». –

+1

Это не обязательно. Он объявляет формальный интерфейс для вашего объекта делегирования. Если у вас нет веских причин его удалить, вы должны оставить его в качестве отладки помогите, это гарантирует, что ваш делегат реализует все методы, которые, по вашему мнению, будут реализованы. Я отредактировал код, чтобы предупредить его. – kubi

Смежные вопросы