Прохождение цепочки респондента для передачи пользовательских событий. Это неправильно?

Согласно iOS документации, цепочка респондента используется для передачи событий касания «вверх по цепочке». Она также используется для действий, генерируемых contr ols. Отлично.

Я действительно хотел бы отправить пользовательское событие «вверх по цепочке». Его обработает первый респондент, который уловит событие. Это кажется довольно распространенным шаблоном, но я не могу найти хорошего объяснения того, как это сделать «способом iOS / Какао».

Так как цепочка респондентов - это именно то, что мне нужно, я придумал решение вроде этого:

// some event happened in my view that 
// I want to turn into a custom event and pass it "up":

UIResponder *responder = [self nextResponder];

while (responder) {

   if ([responder conformsToProtocol:@protocol(ItemSelectedDelegate)]) {
       [responder itemSelected:someItem];
       break;
   } 

   responder = [responder nextResponder];
}

Это работает отлично, но я чувствую, что должны быть другие способы справиться с этим. Ходить по цепи вручную таким способом не очень ... приятно.

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

Как лучше всего справиться с этим в iOS (и в Cocoa)?

РЕДАКТИРОВАТЬ :

Чего я хочу достичь?

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

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

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

18
задан twe4ked 6 June 2012 в 13:24
поделиться