2014-11-11 5 views
1

Я работаю над своим первым приложением, и у меня есть пользовательский интерфейс, но до того, как я продвигаюсь вперед, я ударил камень преткновения из ворот, в учебниках, которые я изучал.Передача выбранных строк между ViewControllers и условными segues в Swift

Two issues I have: 
1) Passing data between TableViewControllers 
2) Conditional Segues 

Приложение использует CoreData и имеет контекст с 3-мя управляемыми объектами в модели: FocusArea, Equipment, & Activity.

Часть моего приложения будет иметь 3 TableViews, отображающие неправдоподобные результаты FocusArea, Equipment, & Activity. Навигация через них будет выглядеть следующим образом:

Step 1   -> Step 2  -> Step 3  -> save selections 
focusAreaTVC -> equipmentTVC -> activityTVC -> saveVC 
equipmentTVC -> focusAreaTVC -> activityTVC -> saveVC 
activityTVC  -> focusAreaTVC -> equipmentTVC -> saveVC 

Когда элемент/элементы в/выбираются на шаге 1, кнопка «Далее» будет перейти к шагу 2, параметры отображения, доступные для строк, выбранных на шаге 1. Как только пользователь сделает выбор на шаге 2, оставшиеся доступные варианты будут отображаться на шаге 3. Я предвижу окончательный выбор на экране сохранения, который будет сохранен в виде массива или словаря.

Вопросы: 1) Вид контроллеры: Вместо того чтобы использовать 9 различных ViewControllers, я планирую использовать performSegueWithIdentifier поэтому мне нужно только настроить 3 контроллеров отображения для объектов и выяснить логику для выполнения переходов.

Могу ли я создать глобальную переменную в AppDelegate для TVC на каждом шаге и поместить логику в оператор switch для каждого VC в пределах performSequeWithIdentifier?

пример:

// AppDelegate variables start all nil, updated at each step, reset to nil on save 
var step1VC = "equipmentVCUsed" 
var step2VC = "focusAreaTVCUsed" 
var step3VC = nil 

// VC switch statement (contained in each TableViewController) 
var segueIdentifier: String 

switch segueName { 
case step1TVC = "focusAreaTVC": 
    segueName = "equipmentTVC" 
case step1TVC = "equipmentTVC: 
    segueName = "focusAreaTVC" 
case step1TVC = "activityTVC": 
    segueName = "focusAreaTVC" 
case step2TVC = "equipmentTVC": 
    segueName = "activityTVC" 
case step2TVC = "focusAreaTVC", step1VC = "equipmentVC": 
    segueName = "activityTVC" 
case step2TVC = "focusAreaTVC", step1VC = "activityVC": 
    segueName = "equipmentTVC" 
case step3VC != nil, 
    segueName = "saveVC" 
    step1TVC = nil 
    step2TVC = nil 
default: 
    println("Something so the the compiler doesn't yell at me") 
} 

2) Я планирую сделать выбор в шаге 1 и передать их к шагу 2 в VC, доработать там, переходите к шагу 3. Так как все они работают вне тот же контекст , могу ли я просто передать выбор из 1 TVC в другой или мне нужно создать список, из которого следующий VC будет извлекать элементы?

Как получить информацию с шага 1 до этапа 3? Должен ли я сохранить выбор в массиве между segues и усовершенствовать их с помощью наборов в каждом VC?

ответ

0

Почему бы просто не разрешить сцепы срабатывать кранами на ячейке просмотра таблицы? Другими словами, сделайте так: Пользователь выбирает параметр из первого представления таблицы -> Затем пользователь видит второй вид таблицы и выбирает из соответствующего набора параметров -> Затем пользователь видит третий вид таблицы и выбирает из соответствующего набора параметров. Вы всегда можете установить обратную кнопку вверху, чтобы пользователь мог вернуться назад и изменить свой выбор.

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

Во всяком случае, чтобы ответить на ваши вопросы:

1) Я предлагаю вам создать суперкласс UIViewController из которых ваши подклассы наследуют, а затем определить свойство в файле .h этого класса, который может быть установлен на объект, который содержит любые данные, которые каждый контроллер должен передать, должны перейти к следующему контроллеру представления. Затем используйте prepareForSegue, чтобы передать данные, которые должен иметь следующий контроллер просмотра.

2) Вы можете передать выборы от 1 ТВЦ к другому (см # 1)

Edit: Если вам нужны какие-либо разъяснения, или если вы чувствуете, я недоразумение ваш вопрос, пожалуйста, не стесняйтесь оставить комментарий , Прошлой ночью у меня было менее 5 часов сна.

+0

Спасибо. Я пытаюсь сохранить все это в Swift, и я бы хотел избежать беспорядка с Objective C. Я начал изучать Obj-C/CoreData, и Apple переключилась на Swift, когда я выполнил ~ 1/2. Я понимаю основы этого, но я бы предпочел не обезьяна с Obj-C, если мне это не нужно. Я ничего не добавляю в SQLite DB. Я просто выбираю, уточняю и сохраняю список. – iOSPadawan

+0

Еще раз спасибо за ваш ответ. Я подумал об этом в спортзале, и я думаю, что ты прав ... бесполезно сложно. Я думаю, что я собираюсь сделать селектор VC, который устанавливает параметры для подключения к TVC для отображения. #LessDrama – iOSPadawan

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