Различные представления данных в 1 контроллере представления

Я использую Xcode 6 и Swift.

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

Первое представление — это список, второе — сетка, а третье — таблица с некоторыми метками.

Несмотря на разный внешний вид, все они основаны на одном и том же источнике данных.

Каков разумный способ добиться этого?

Должен ли я перетаскивать 3 представления на 1 контроллер (тот же контроллер представления) и выполнять весь мой дизайн/раскадровку в каждом представлении, добавлять ограничения по мере необходимости, а затем просто отображать/скрывать каждое представление соответствующим образом?

Есть ли другой или лучший способ сделать это, или это правильно?

Спасибо большое!


person NullHypothesis    schedule 29.07.2014    source источник


Ответы (2)


Глядя на требование, я считаю, что TabViewController лучше всего. Используя сегментированный контроллер, вам нужно самостоятельно позаботиться о переключении представлений. У вас может быть TabViewController с 3 viewControllers, и эти контроллеры представлений могут получать данные полива, которые им нужны, из вашего источника данных.

person Avi    schedule 29.07.2014
comment
спасибо - что, если я уже использовал TabViewController для чего-то другого (более высокого уровня, более иерархического/организационного)? :) - person NullHypothesis; 30.07.2014

Есть два элегантных способа сделать это эффективно и наглядно.

1) Вы можете использовать разные xib для каждых 3 представлений, а во время выполнения загружать соответствующие xib различных представлений. Этот подход следует использовать, если у вас есть небольшие и четкие представления. Не нужно много работать, например, dataSource и delgations. Три представления будет управляться только одним контроллером представления.Это сделает все ваши представления отдельными и легкоуправляемыми.Вы можете загружать разные представления как

//Your view property
var uiview :UIView?
//load nib from bundle in view    
self.uiview = NSBundle.mainBundle().loadNibNamed("myXib", owner: self, options: nil)[0] as? UIView

2) Используйте container viewcontroller. Сделав это, вы можете добавить разные контроллеры к своему родительскому контроллеру. Этот подход очень чистый, поскольку разные представления обрабатываются разными контроллерами, но его сложно написать. Используйте это, если вам нужно выполнить тяжелую работу. каждый просмотр. См. видео WWDC, чтобы получить дополнительную помощь https://developer.apple.com/videos/wwdc/2011/?id=102

Я думаю, что в вашем случае подходит подход 1st, используйте три разных xib, загрузите их во время выполнения и добавьте как subview вашего viewController

person codester    schedule 29.07.2014
comment
Спасибо - и простите мое невежество, но является ли xib устаревшей вещью, которая обычно больше не используется в Xcode (или чем-то, что использовалось до раскадровки), или xib является фундаментальной вещью, которую можно было бы ожидать даже со Swift? - person NullHypothesis; 30.07.2014
comment
Кроме того, есть ли что-то неправильное в том, что я просто использую сегментированный элемент управления, чтобы просто перевести пользователя на 3 разных контроллера представления? Тут и там будет дублирование кода, может быть, 5-10 строк. - person NullHypothesis; 30.07.2014