簡體   English   中英

從iPhone上的彈出視圖控制器傳回數據

[英]Pass data back from a popover view controller on iPhone

如何將數據從PopoverViewController傳遞回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)"
    }
}

使用上面的代碼,我可以毫無問題地將數據傳回主視圖控制器,問題是彈出窗口不起作用,它只是像占用整個屏幕的常規ViewController一樣。

有趣的是,如果我評論下面的代碼行,popover工作,但我不能再傳回數據,我可以看到彈出窗口,但傳遞的數據停止工作。

// if I comment this line 
self.presentViewController(pvc, animated:false, completion:nil)

我沒有任何錯誤,只是停止工作。

有什么建議?

非常感謝

prepareForSeguedestinationViewController是您的PopoverViewController 您需要將其popoverPesentationController?.delegate轉換為該對象並設置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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM