Xcode Swift пропускает строку из popover view в основной VC
Я пытаюсь передать данные из строки в моем popOverViewController
обратно в мой mainVC как строку. Но я не могу понять, как это сделать, поэтому, пожалуйста, помогите кому-нибудь.
Моя главная функция:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "popoverSegue" { let popoverViewController = segue.destinationViewController popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover popoverViewController.popoverPresentationController!.delegate = self } }
Мой popOverVC:
- В App Purchase - Справка на последнем этапе - загрузка содержимого
- Архивы Xcode медленные
- Неустранимая ошибка: неожиданно найден nil при разворачивании необязательного значения с помощью AVAudio
- Ошибка кодирования кода XCode 9
- Как запустить iOS 8.x симулятор в Xcode 7.0 (окончательная версия)
Im пытается передать значениеВыбранный back to mainVC
var pickerString = NSArray() as AnyObject as! [String] var valueSelected = String() @IBOutlet weak var picker: UIPickerView! @IBAction func pickButton(sender: AnyObject?) { // need to send valueSelected back to previous navigated view print("Value: ", valueSelected) dismissViewControllerAnimated(true, completion: nil) }
необходимо отправить
valueSelected
обратно в предыдущее навигационное представление.
- Ошибка EXC_BAC_ACCESS при сохранении основных данных Логическое поле
- Как отобразить окно входа в систему перед контроллером табуляции?
- Xcode5: Не удается просмотреть источник частиц SpriteKit в xcode
- Инструмент swift-stdlib завершился с кодом выхода 1
- Создайте файл ipa с развертыванием предприятия в iOS 9.2
- Конфигурация системы XCode и невозможность доступа к клавиатуре ios
- Несоответствие в разработке экрана с раскадрой
- Автоматический код
Для этого вы можете быстро использовать closures
. Вот как это сделать:
FirstViewController.swift
class FirstViewController: UIViewController { override func viewDidLoad() { } @IBAction func onButtonTap(_ sender: UIButton) { self.performSegue(withIdentifier: "popoverSegue", sender: self) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "popoverSegue" { let popoverViewController = segue.destination as!PopOverViewController popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover popoverViewController.popoverPresentationController!.delegate = self popoverViewController.completionHandler = {(valueSelected : String?) in if let valueSelected = valueSelected { print(valueSelected) //Write yout code here } } } } }
PopOverViewController.swift
class PopOverViewController: UIViewController { var completionHandler : ((String?)->(Void))? var pickerString = NSArray() as AnyObject as! [String] var valueSelected = String() @IBAction func pickButton(_ sender: UIButton) { print("Value: ", valueSelected) self.dismiss(animated: true, completion: {[weak self] in if let handler = self?.completionHandler { handler(self?.valueSelected) } }) } }
Если вы хотите использовать делегат
добавить протокол
protocol SelectDelegate: NSObjectProtocol { func select(_ string: String) }
добавить слабый тип Делегировать в popOverVC и использовать его до отклоненияПросмотр
var pickerString = NSArray() as AnyObject as! [String] var valueSelected = String() weak var delegate: SelectDelegate? @IBOutlet weak var picker: UIPickerView! @IBAction func pickButton(sender: AnyObject?) { print("Value: ", valueSelected) //added Line delegate?.select(valueSelected) dismissViewControllerAnimated(true, completion: nil) }
Внедрить SelectDelegate в MainVC
class MainVC { . . . func select(string: String) { //doSometing popupVC's string } }
назначить делегата popOverVC mainVC
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "popoverSegue" { let popoverViewController = segue.destinationViewController popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover popoverViewController.popoverPresentationController!.delegate = self // added Line popoverViewController.delegate = self } }