2017-01-01 7 views
1

私の最初のビューコントローラには、ボタンを押すことで呼び出し元の関数があります。私は私の見解ではビューコントローラ間で変数が共有されていません

var RecordTitle = String() 

として変数を定義し、私の支払いビューコントローラで

func BuyButton(sender:UIButton) { 
    print("clicked cell is at row \(sender.tag)") 
    let indexPath = NSIndexPath(row: sender.tag, section: 0) 
    let currentCell = tableView.cellForRow(at: indexPath as IndexPath) as! CustomCell 
    let Storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let PaymentController = Storyboard.instantiateViewController(withIdentifier: "PaymentViewController") as! PaymentViewController 
    print(currentCell.Test.text!) //prints fine here 
    PaymentController.RecordTitle = currentCell.Test.text! 
    performSegue(withIdentifier: "Buy", sender: self) 
} 

私の支払いのビューコントローラの負荷をした私はRecordTitleを印刷しようと、何も

print(RecordTitle)//Nothing prints in payment view controller 

を印刷しません私は間違って何をしていますか?私は複数の方法を試したが、どれもうまくいかないようだ。

+0

より受け入れ「Swifty:あなたは第二の方法に興味があれば

func BuyButton(sender:UIButton) { print("clicked cell is at row \(sender.tag)") let indexPath = NSIndexPath(row: sender.tag, section: 0) let currentCell = tableView.cellForRow(at: indexPath as IndexPath) as! CustomCell let Storyboard = UIStoryboard(name: "Main", bundle: nil) let PaymentController = Storyboard.instantiateViewController(withIdentifier: "PaymentViewController") as! PaymentViewController print(currentCell.Test.text!) //prints fine here PaymentController.RecordTitle = currentCell.Test.text! self.presentViewController(PaymentController, animated: false, completion: nil) } 

、このリンクでは良い例があります"** var RecordTitle = String()**は** var recordTitle =" "**です。可能であれば、キャメルケース変数と推論タイプ。 – dfd

答えて

1

あなたはまた、そのタイトル

performSegue(withIdentifier: "Buy", sender: currentCell.Test.text!) 
+0

ありがとうございましたが、私はこれを試してまだ何もしていません –

+0

@HaydenBowden 'タイトル'メソッドは 'prepare'メソッドで割り当てられていますか?そして 'viewDidLoad'には' nil'オブジェクトがありますか? –

2

することができますとperformSegueを呼び出すことを忘れないでくださいprepare(segue, sender)メソッドをオーバーライドする必要があり、その方法で必要なビューコントローラを取得し、

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "Buy" { 
     let vc = segue.destination as! PaymentViewController 
     vc.RecordTitle = sender as? String 
    } 
} 

タイトルを設定2つの方法でviewControllerを変更します。 1:instantiateViewController 2:performSegue あなたはこのように行う最初の方法を使用したい場合は、それらを を組み合わせています http://www.codingexplorer.com/segue-swift-view-controllers/

+0

ありがとう、これは完全に働いた! –

関連する問題