2017-01-01 79 views
1

在我的第一个视图控制器中,我有一个按下按钮调用的函数。变量不在视图控制器之间共享

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

在我的付款视图控制器我将变量定义为

var RecordTitle = String() 

在我看来没我的付款视图控制器的负载我尝试打印RecordTitle并没有什么打印

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

我究竟做错了什么?我已经尝试了多种方法,但都没有效果。

+0

更接受“SWIFTY “** var的方式RecordTitle = String()**是** var recordTitle =”“**。骆驼案例变量和可能的推断类型。 – dfd

回答

1

你需要重写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 
    } 
} 

也不要忘记调用performSegue与标题

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

谢谢,但我只是试过这个,但什么也没有 –

+0

@HaydenBowden你是否已经在'prepare'方法中指定了标题?而在'viewDidLoad'中你看到'nil'对象? –

2

你可以通过2方法更改viewController: 1:instantiateViewController 2:performSegue 但你正在结合他们 如果你想使用第一种方法只是这样做:

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

,如果你有兴趣在第二种方法中,有在这个环节一个很好的例子: http://www.codingexplorer.com/segue-swift-view-controllers/

+0

谢谢,这工作完美! –

相关问题