其他页面上的变量转换错误
Error to variable transition on other page
我正在创建一个问候应用程序,用户可以输入他们的名字和应用程序 return "Hello Jack!"
。
错误信息
Type 'UIViewController' has no member 'textFieldString'
如何修复它,因为我已经在 ViewController.swift 上设置了变量。
textFieldString = textField.text!
代码
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
[![enter image description here][1]][1]
var textFieldString = ""
@IBAction func pushButton(_ sender: UIButton){
textFieldString = textField.text!
textField.text = ""
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let resultViewController = segue.destination as! ResultViewController
resultViewController.result = textFieldString
}
@IBAction func unwind(_ segue: UIStoryboardSegue) {
}
}
结果ViewController.swift
import UIKit
class ResultViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var result: String?
override func viewDidLoad() {
super.viewDidLoad()
label.translatesAutoresizingMaskIntoConstraints = false
label.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
label.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
label.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
label.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
label.text = "Hello\(result)! "
}
}
截图
原因:
textFieldString
是 ViewController
的 属性 而不是 UIViewController
.
解法:
在ResultViewController
中创建一个属性result
并在viewDidLoad()
中设置为label
。
class ResultViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var result: String?
override func viewDidLoad() {
super.viewDidLoad()
//rest of the code...
label.text = "Hello\(result ?? "")" //here...
}
}
现在在 ViewController's
prepare(for:sender:)
方法中将 result
设置为 textFieldString
,即
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let resultViewController = segue.destination as! ResultViewController
resultViewController.result = textField.text
}
您只需要以您之前的 ViewController 作为目的地执行 segue。
像这样:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destination = segue.destination as? ViewController
destination?.textField.text = "Hello Jack"
}
嘿@NPP 我已经检查了您编写的所有代码,如果您需要,我也可以将代码示例发送给您。您的问题是您没有将 IBOutlet 连接到您的文本字段。
@IBOutlet weak var textField: UITextField!
这是您的 IBOutlet,请将它连接到故事板中的文本字段。
谢谢
我正在创建一个问候应用程序,用户可以输入他们的名字和应用程序 return "Hello Jack!"
。
错误信息
Type 'UIViewController' has no member 'textFieldString'
如何修复它,因为我已经在 ViewController.swift 上设置了变量。
textFieldString = textField.text!
代码
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
[![enter image description here][1]][1]
var textFieldString = ""
@IBAction func pushButton(_ sender: UIButton){
textFieldString = textField.text!
textField.text = ""
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let resultViewController = segue.destination as! ResultViewController
resultViewController.result = textFieldString
}
@IBAction func unwind(_ segue: UIStoryboardSegue) {
}
}
结果ViewController.swift
import UIKit
class ResultViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var result: String?
override func viewDidLoad() {
super.viewDidLoad()
label.translatesAutoresizingMaskIntoConstraints = false
label.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
label.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
label.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
label.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
label.text = "Hello\(result)! "
}
}
截图
原因:
textFieldString
是 ViewController
的 属性 而不是 UIViewController
.
解法:
在ResultViewController
中创建一个属性result
并在viewDidLoad()
中设置为label
。
class ResultViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var result: String?
override func viewDidLoad() {
super.viewDidLoad()
//rest of the code...
label.text = "Hello\(result ?? "")" //here...
}
}
现在在 ViewController's
prepare(for:sender:)
方法中将 result
设置为 textFieldString
,即
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let resultViewController = segue.destination as! ResultViewController
resultViewController.result = textField.text
}
您只需要以您之前的 ViewController 作为目的地执行 segue。
像这样:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destination = segue.destination as? ViewController
destination?.textField.text = "Hello Jack"
}
嘿@NPP 我已经检查了您编写的所有代码,如果您需要,我也可以将代码示例发送给您。您的问题是您没有将 IBOutlet 连接到您的文本字段。
@IBOutlet weak var textField: UITextField!
这是您的 IBOutlet,请将它连接到故事板中的文本字段。
谢谢