2016-07-24 2 views
4

Как передать данные обратно с PopoverViewController на главный контроллер представления на iPhone?Передача данных с контроллера popover view на iPhone

Я знаю, что я делаю что-то ужасно неправильно, но я не могу понять это.

Вот код: PopoverViewController.swift

protocol PopoverViewControllerDelegate { 
    func messageData(data: AnyObject) 
} 

class PopoverViewController: UIViewController { 
    @IBOutlet weak var inputMessage: UITextField! 
    var delegate: PopoverViewControllerDelegate? 

    @IBAction func sendData(sender: AnyObject) { 
     if inputMessage.text != ""{ 
      self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil) 
      self.delegate?.messageData(inputMessage.text!) 
     } 
    } 
} 

Главная ViewController.swift:

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate, PopoverViewControllerDelegate { 

    @IBOutlet weak var showData: UILabel! 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // popover segue 
     if segue.identifier == "popoverSegue" { 

      let popoverViewController = segue.destinationViewController 
      popoverViewController.popoverPresentationController!.delegate = self 
     } 
     // code to comunicate with data in popoverViewController 
     let pvc = storyboard?.instantiateViewControllerWithIdentifier("popoverViewController") as! PopoverViewController 
     pvc.delegate = self 
     self.presentViewController(pvc, animated:false, completion:nil) 
    } 

    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
     return UIModalPresentationStyle.None 
    } 

    func messageData(data: AnyObject) { 
     self.showData.text = "\(data)" 
    } 
} 

С кодом выше я могу передать данные обратно в основной контроллер зрения без проблем, проблема в том, что popover не работает, он просто действует как обычный ViewController, занимающий весь экран.

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

У меня нет ошибок, один перестает работать.

Любые предложения?

Большое спасибо

ответ

2

prepareForSegue В, то destinationViewController ваш PopoverViewController. Вам нужно отбросить его и установить delegate, чтобы вы могли передавать данные, и вам также нужно установить popoverPesentationController?.delegate. Вам не нужны остальная часть коды в prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // popover segue 
    if segue.identifier == "popoverSegue" { 
     let popoverViewController = segue.destinationViewController as! PopoverViewController 
     popoverViewController.delegate = self 
     popoverViewController.popoverPresentationController?.delegate = self 
    } 
} 
+0

@ vacawama - The поповер не работает, проезжающая работа данных, но поповер ViewController заполняет весь экран. Спасибо –

+1

Вы выбрали 'presentAsPopover', когда вы подключили сегу в раскадровке? – vacawama

+0

Да, да. Спасибо –