2016-11-12 4 views
2

私のpopOverViewControllerの文字列のデータを文字列としてmainVCに戻そうとしています。しかし、私はこれを行う方法を把握することはできませんので、誰も助けてください。Xcode Swift pass PopoverビューからメインVCへの文字列

マイmainVCのセグエFUNC:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "popoverSegue" { 
     let popoverViewController = segue.destinationViewController 
     popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover 
     popoverViewController.popoverPresentationController!.delegate = self 

    } 
} 

マイpopOverVC:

イム戻って、以前のナビゲートにvalueSelected文字列を送信する必要が

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) 
} 

バックmainVC

にvalueSelectedを渡そうとしビュー。

+1

使用アンワインドの代わりに '(...)解任呼び出すのでsegues' –

+1

ます代理人を使用できます。 –

+0

[アンワインドセグは何ですか?どのように使用しますか?](http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use ----------) –

答えて

1

にpopOverVCのデリゲートを割り当てます。ここでは、これを行う方法です:

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) 
      } 
     }) 
    } 
} 
+0

魅力的な作品:-)おかげでPGDev ....ちょうど私が探していたもの – Flev40

0

あなたは委任

がdismissViewController

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) 
} 

がMainVC

にSelectDelegateを実装する前にpopOverVCに弱いタイプの委任を追加し、それを使用するプロトコル

protocol SelectDelegate: NSObjectProtocol { 
    func select(_ string: String) 
} 

を追加使用したい場合

class MainVC { 

. . . 

    func select(string: String) { 
     //doSometing popupVC's string 
    }  
} 

はmainVC

あなたが迅速に closuresを使用することができます。このため
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 
    } 
}