Цель C: запуск событий между представлениями - PullRequest
0 голосов
/ 29 августа 2011

ОК ... Я разрабатываю приложение для iPad с использованием разделенного представления. Мой подробный вид содержит карту с маркерами на нем, а корневой вид - это табличное представление.

Мои данные разделены на 4 массива, и мне нужно иметь возможность переключаться между отображением этих 4 массивов с помощью кнопки. Маркеры, отображаемые на карте, и данные в табличном представлении необходимо изменить, чтобы отображался только выбранный массив. Это легко с точки зрения карты, поскольку NIB для файла подробного просмотра позволяет мне легко добавлять кнопки и выполнять функции из них. Но ... Это не помогает мне для табличных данных в моем контроллере корневого представления, тем более что корневое представление, ну, в общем, является корневым представлением и выше детального представления. Легко передать функции из корневого представления в подробное представление, но не наоборот, плюс это кажется «неправильным» способом выполнения действий.

Я предполагаю, что мне может понадобиться пользовательский объект, содержащий переменную, чтобы программа знала, какой массив отображать. Это не кажется слишком сложным, но ... Если это так, то мне кажется, что мне нужно создать какой-то делегат для вызова функции в корневом и подробном представлении каждый раз, когда изменяется переменная внутри моего пользовательского объекта. У кого-нибудь есть идеи, как я смогу это сделать?

По сути, мне нужна своего рода «глобальная переменная», которая может быть изменена нажатием кнопки и будет вызывать функции в обоих представлениях при каждом изменении переменной. Хитрость в том, что эта кнопка находится в подпредставлении.

Это мой первый вопрос по StackOverflow, поэтому я прошу прощения, если он написан плохо или я пропустил слишком много деталей ... Пожалуйста, дайте мне знать, если есть какие-либо вопросы. Я мог бы действительно, действительно использовать помощь, потому что я довольно застрял. Всем спасибо! Этот сайт и все вы, люди, были очень полезны для моего развития.

1 Ответ

0 голосов
/ 29 августа 2011

Я думаю, что вам все еще нужно потратить некоторое время на размышления о своем пользовательском опыте, потому что это может быть индикатором того, что что-то не так. Но если именно так должно работать ваше приложение, я бы предложил сохранить вашу «глобальную» переменную внутри вашего делегата приложения. Если в представлении корневой таблицы используется свойство вашего делегата приложения в качестве источника данных, то простой [self.tableView reloadData] перезагрузит представление таблицы с новыми данными, и, похоже, у вас уже есть метод обновления для представления карты.

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

@protocol DataSetChangedDelegate <NSObject>
@required
- (void)dataUpdated;
@end

Затем, всякий раз, когда вы изменяете данные в делегате приложения, вы просто вызываете функцию делегата, и каждый контроллер представления сможет ответить соответствующим образом.

[self.delegate dataUpdated];
...