iOS. Могу ли я вызвать переход на основе касания в представлении контейнера?

У меня есть UITableViewController с именем ListViewController (на самом деле это Parse.com PFQueryTableViewController, но это между прочим), а в верхней части UITableView у меня есть Container View, в который встроен UITableViewController.

Во встроенном UITableViewController есть несколько статических ячеек. Что я хотел бы сделать, так это инициировать переход от ListViewController к другому представлению (Navigation Push), когда пользователь нажимает на одну из ячеек внутри встроенного UITableViewController. .

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

ПРИМЕЧАНИЕ. Я разрабатываю приложение на Swift.


person Max    schedule 22.04.2015    source источник
comment
Переход подключается к родительскому контроллеру представления? Вам нужно использовать переход?   -  person Wain    schedule 22.04.2015
comment
Уэйн - позвольте мне уточнить... Я хочу отправить другое представление (назовем его DetailListViewController) из ListViewController на основе касания ячейки во встроенном UITableViewController   -  person Max    schedule 22.04.2015


Ответы (3)


Вы должны установить отношение делегата между встроенным контроллером табличного представления и вашим ListViewController, чтобы при касании ячеек встроенной таблицы запускался обратный вызов делегата. Затем обработчик обратного вызова (часть ListViewController) может инициировать переход.

Таким образом, встроенный контроллер табличного представления имеет свойство делегата, которое можно установить, а ListViewController реализует протокол делегата.

person Wain    schedule 22.04.2015
comment
Как мне настроить такой делегат и «обратный вызов», возможно, пример кода? Раньше я не использовал контейнерные представления (извините, если это основной вопрос!) - person Max; 22.04.2015
comment
Представления контейнера не имеют значения, это отношения между двумя контроллерами. На данный момент я не использую Swift, и вам нужен быстрый пример, поэтому вам нужно будет найти общий учебник по быстрым делегатам. - person Wain; 22.04.2015
comment
Спасибо, Уэйн :) Просто чтобы уточнить, мне нужно будет создать класс для представления содержимого, чтобы связать все это правильно? - person Max; 22.04.2015
comment
Вам нужно создать протокол, но вам не нужен дополнительный класс, и представления не меняются вообще. ListViewController добавляет себя в качестве делегата встроенного контроллера (который, я думаю, уже добавлен в код?) - person Wain; 22.04.2015
comment
Я использую раскадровки, поэтому делегаты не добавляются в код, о котором я знаю. - person Max; 22.04.2015
comment
У ListViewController есть выход на встроенный контроллер? Надеюсь, встроенный контроллер является дочерним, а не скрытым в представлении контейнера? - person Wain; 22.04.2015
comment
Я добавил представление контейнера в соответствии с этим руководством: mikebobiney. com/2014/09/28/static-table-view-containers - person Max; 22.04.2015
comment
Для всех, кто пытается решить эту проблему, я нашел эту ссылку, в которой легко объясняется, как настроить протоколы и методы делегата... и это в Swift! :) makeapppie.com/2014/07/01/ - person Max; 02.05.2015

У меня есть проект на Github под названием "Test" (ссылка), который показано, как настроить статические табличные представления внутри контейнерного представления и подключить двустороннюю связь между контроллерами табличного представления и их родительским контроллером представления.

Он написан на Objective-C, но техника та же, что и в Swift.

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

Вы подключаете представление контейнера в родительском элементе к контроллеру(ам) представления дочерней таблицы, используя переходы внедрения.

Вы добавляете метод prepareForSegue в родительский контроллер представления, который устанавливает родителя в качестве делегата дочернего элемента (вы не можете использовать имя свойства «делегат», поскольку оно уже используется; используйте что-то вроде «parentVCDelegate»)

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

person Duncan C    schedule 22.04.2015

Подключите переход к таблице в контейнере. Не волнуйтесь, он автоматически найдет родительский навигационный контроллер.

person malhal    schedule 28.01.2017