2016-12-26 7 views
0

Так что я пытаюсь развязать сеанс для работы с последних двух дней. Я пробовал смотреть и следить за несколькими различными учебниками, и ни один из них не был успешным. Я создал @IBAction override func unwind(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController), но это никогда не выполняет какой-либо код. Я поставил простой шрифт и напечатал его, он никогда не печатал текст. Я создал это в первом контроллере просмотра, а затем во втором контроллере просмотра у меня была кнопка, с которой я подключился к выходу в верхней части контроллера просмотра, и выбрал действие для размотки и никогда не разматывается. Что я делаю не так или нет?xcode 8 swift: undeze segue данные передачи не работают

Так вот, что я до сих пор у меня есть 2 просмотров: RaceViewController & SingleStatViewController

Начну, выбрав определенные строки в RaceViewController и они будут открыты SingleStatViewController модально. У меня есть кнопка в SingleStatViewController с именем rejectBtn. Когда я нажимаю кнопку, это отклоняет SingleStatViewContoller. Мне просто нужно передать некоторые данные в RaceViewController.

Так, если пользователь выбирает 1 из 3 ячеек в таблице (строки Half-Orc, Half-Elf и Human), он откроет SingleStatViewController и попросит выбрать 1 stat (они будут иметь 6 кнопок (Str, Dex, Con, Int, Wis, Chr), когда они выбирают одну из кнопок, она вернет данные и обновит detailTextLabel.

Я выбираю Human, тогда я выбираю Str. Когда он вернется в RaceViewController и обновит его . текст в detailTextLabel до +2 ул

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

@IBAction func dismissbtn(_ sender: Any) 
{ 
    dismiss(animated: true, completion: nil) 
} 

ответ

1

Вы должны выполнить раскрутку и отправить данные следующим образом:

@IBAction func unwindToRaceViewController(sender: UIStoryboardSegue) 
{ 
    if let sourceViewController = sender.sourceViewController 
          as? RaceViewController { 
    stat = sourceViewController.stat 
} 

Вы можете обратиться к этой статье для unwind segues as alternative to delegate

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

0

Итак, у вас есть Vc A и B Vc, это то, что вам нужно сделать, чтобы использовать разматывания SEGUE:

  1. В В.- А, создать функцию, например, переход. @IBAction func unwind(segue: UIStoryboardSegue)

  2. В В.- В, написать код, который называют self.performSegueWithIdentifier("unwind", sender: self) (предположим, что идентификатор и имя функции одно и то же - назовем это в dismissbtn)

  3. В В.- В в раскадровке, смотрите поверх него , появится желтая кнопка и 2 оранжевые кнопки, удерживайте и перетащите желтую кнопку на оранжевую кнопку «Выход», выберите действие, которое вы создали в vc A, укажите его как указано

  4. В функции unwind func, остальное - это то же самое, что и обычный переход, когда вы передаете данные вперед, просто измените destination в source и вы должны представить Vc B из В.- А еще затем использовать делегат

+0

Для шага 4 Im угадывание я бы что-то вроде этого 'пусть unwindData = segue.source, как! RaceViewController' – Micheal

+0

Итак, я последовал твоим шагам. Шаг 4 Я немного потерял.Я все еще новичок в этом и только работаю над ним последние 3 недели. До сих пор я завершил этап 3. Когда я запускаю приложение, и я нажимаю на свой увольнение, он дает мне и ошибку: он переходит в AppDelegate и выделяет «класс AppDelegate: UIResponder, UIApplicationDelegate {' it says Thread 1: Signal SIGABRT. Я не уверен, что мне не хватает. Я могу только догадываться, потому что у меня нет ничего в моей функции размотки. Я получаю предупреждение Неподдерживаемая конфигурация. Сегсы, инициированные непосредственно из диспетчеров, используют идентификатор. – Micheal

+0

@MIcheal вы должны дать свой идентификатор segue после того, как вы его перетащите, и он не должен терпеть крах, потому что у него ничего нет в функции, у вас есть ошибка, потому что вы пропустили какой-то шаг или неверный идентификатор, также на шаге 4 вы должны знать как вы выполняете forward segue, просто измените 'destinationViewController' на' sourceViewController', чтобы получить vc B, тогда вы можете получить его свойство – Tj3n