在第二个 VC 中仅将输入文本从文本字段传递到标签!但是我希望当用户在 uitextfield 中输入数字 10 时(1 张票是 2 欧元,所以 10 张票 * 2 欧元是 20)并且当我单击“支付”按钮时,以便 SUM 可以显示在第二个 VC 的标签中,我认为 viewdidload VC2 发生在prepareForSegue 之前,我不知道。当我第二次单击“付款”按钮时它有效,但当我第一次单击“付款”按钮时标签显示零,帮助:)嵌入导航 Controller 中进行导航。
VC1
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var howManyTickets: UITextField!
var sumTicketsAndPriceOfTickets = Int()
var priceOfTicket = 2 // euros
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func platiTeKarte(sender: AnyObject) {
sumTicketsAndPriceOfTickets = howManyTickets.text.toInt()! * priceOfTicket
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let driver = segue.destinationViewController as! primaocViewController
var whatToPass = sumTicketsAndPriceOfTickets
driver.receiver = whatToPass
}
}
VC2
import UIKit
class primaocViewController: UIViewController {
@IBOutlet weak var displaySum: UILabel!
var receiver:Int!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.displaySum.text = String(receiver)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
最佳答案
如果您的按钮直接连接到 segue,那么您也不需要 @IBAction。正如您所看到的,prepareForSegue
发生在 Pay 按钮的 @IBAction 之前。只需在 prepareForSegue
中计算您的值即可:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let driver = segue.destinationViewController as! primaocViewController
driver.receiver = (howManyTickets.text.toInt() ?? 0) * priceOfTicket
}
我更改了报酬的计算以使用nil合并运算符??
。这通常是一种更安全的方法,因为如果 toInt()
由于任何原因返回 nil
,在这种情况下它将只使用 0
而不会崩溃.
关于Swift - 将文本和 int 从 vc1 传递到 vc 2 (uitextfield -> vc2 中的标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956522/