前提・実現したいこと
override func prepare(for segue: UIStoryboardSegue, sender: Any?)で値を受け渡し、差額を計算する機能を勉強で作っているのですが、
ViewControllerのtextFieldに入力された数字がNextViewControllerのlabelに表示され、
NextViewControllerのlabelからTextFieldを引いた数をThirdViewControllerのlabelに表示という機能を作りたいのですが、
実装出来ていません。
エラー(追記)
import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let identifier = segue.identifier else { return } if(identifier == "aSegue") { let nc = segue.destination as! UINavigationController // エラー Thread 1: signal SIGABRT let vc = nc.topViewController as! nextViewController vc.aText = self.textField.text } } }
該当のソースコード
ViewController
import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let identifier = segue.identifier else { return } if(identifier == "aSegue") { let nc = segue.destination as! UINavigationController let vc = nc.topViewController as! nextViewController vc.aText = self.textField.text } } }
NextViewController
import UIKit class nextViewController: UIViewController { var aText:String? @IBOutlet weak var label: UILabel! @IBOutlet weak var textField2: UITextField! override func viewDidLoad() { super.viewDidLoad() // textField2の入力方法をナンバーパッドに設定 textField2.keyboardType = UIKeyboardType.numberPad guard self.aText != nil else { return } self.label.text = aText! } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let identifier = segue.identifier else { return } if(identifier == "bSegue") { let nc = segue.destination as! UINavigationController let vc = nc.topViewController as! thirdViewController vc.bText = self.textField2.text } } }
thirdViewController
import UIKit class thirdViewController: UIViewController { var bText:String? @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() } }
試したこと
色々と調べて以下のコードを書いているのですが、実装出来ていないです。
nextViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let identifier = segue.identifier else { return } if(identifier == "bSegue") { let nc = segue.destination as! UINavigationController let vc = nc.topViewController as! thirdViewController vc.bText = self.textField2.text } if(identifier == "bSegue") { let nc = segue.destination as! UINavigationController let vc = nc.topViewController as! thirdViewController vc.bLabel = self.label.text } } }
thirdViewController
import UIKit class thirdViewController: UIViewController { var bText:String? var bLabel:String? @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() let intText = Int(bText.text!) // エラー Value of type 'String?' has no member 'text' let intLabel = Int(bLabel.text!) // エラー Value of type 'String?' has no member 'text' let keisan = intLabel! - intText label.text = String(keisan) } }
ご教示いただけると幸いです。
宜しくお願いします。
補足情報(FW/ツールのバージョンなど)
Swift4 Xcode10
回答1件
あなたの回答
tips
プレビュー