Ios 塞格街的噩梦
应用程序应该做什么: 1) 用户在文本字段中键入一个单词,然后点击相应的按钮 2) 应用程序应切换到包含两个标签的另一个场景。一个应显示用户键入的单词,另一个应标识所点击的按钮。这些数据应该通过接收ViewController上的属性传递 它的实际功能: 1) segue立即被调用,显然绕过了Ios 塞格街的噩梦,ios,swift,properties,switch-statement,uistoryboardsegue,Ios,Swift,Properties,Switch Statement,Uistoryboardsegue,应用程序应该做什么: 1) 用户在文本字段中键入一个单词,然后点击相应的按钮 2) 应用程序应切换到包含两个标签的另一个场景。一个应显示用户键入的单词,另一个应标识所点击的按钮。这些数据应该通过接收ViewController上的属性传递 它的实际功能: 1) segue立即被调用,显然绕过了prepare(segue:sender:) 2) 两个标签都是空白的 3) 断点和print()表示从未调用prepare(segue:sender:) 我检查/尝试的内容: 1) 根据我的print()
prepare(segue:sender:)
2) 两个标签都是空白的
3) 断点和print()
表示从未调用prepare(segue:sender:)
我检查/尝试的内容:
1) 根据我的print()
语句,按钮在情节提要中具有正确的标记
2) 我已经用if-else
替换了switch
3) 我很确定我已经阅读了所有相关的问题和答案
4) 在prepare(segue:sender:)
中将sender
从Any?
切换到ui按钮,然后再次切换
代码
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var tf2: UITextField!
@IBOutlet weak var tf3: UITextField!
@IBOutlet weak var tf4: UITextField!
@IBAction func sendButton(_ sender: UIButton) {
print("sender.tag is \(sender.tag)")
self.performSegue(withIdentifier: "mySegue", sender: sender)
print("sender.tag is \(sender.tag)")
}
@IBAction func button2(_ sender: UIButton) {
print("sender.tag is \(sender.tag)")
self.performSegue(withIdentifier: "mySegue", sender: sender)
print("sender.tag is \(sender.tag)")
}
@IBAction func button3(_ sender: UIButton) {
print("sender.tag is \(sender.tag)")
self.performSegue(withIdentifier: "mySegue", sender: sender)
print("sender.tag is \(sender.tag)")
}
@IBAction func button4(_ sender: UIButton) {
print("sender.tag is \(sender.tag)")
self.performSegue(withIdentifier: "mySegue", sender: sender)
print("sender.tag is \(sender.tag)")
}
func prepare(for segue: UIStoryboardSegue, sender: UIButton) {
print("Inside prepare for segue")
print("sender.tag is \(sender.tag)")
if segue.identifier == "mySegue" {
let vc = segue.destination as! SecondViewController
print("sender.tag is \(sender.tag)")
switch sender.tag {
case 101:
if (textField.text?.count)! >= 1 {
vc.staticText = "Button 101"
vc.textProp = self.textField.text!
print("sender.tag is \(sender.tag)")
}
case 102:
if (tf2.text?.count)! >= 1 {
vc.staticText = "Button 102"
vc.textProp = self.tf2.text!
print("sender.tag is \(sender.tag)")
}
case 103:
if (tf3.text?.count)! >= 1 {
vc.staticText = "Button 103"
vc.textProp = self.tf3.text!
print("sender.tag is \(sender.tag)")
}
case 104:
if (tf4.text?.count)! >= 1 {
vc.staticText = "Button 104"
vc.textProp = self.tf4.text!
print("sender.tag is \(sender.tag)")
}
default:
print("Something went wrong")
}
// print("In FirstVC, vc.textProp = \(vc.textProp)")
}else{
print("No text in textField...")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我承认我很擅长忽视显而易见的东西,但在打扰你们之前我确实花了很多时间。任何帮助或指导都将不胜感激
谢谢 prepare(for segue
未被调用,因为签名错误。您不能更改发送方
参数的类型
例如,在一个额外的行中将sender
强制转换为期望的类型
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue",
let button = sender as? UIButton {
...
并用按钮
@vadian替换所有后续出现的发送者
——非常感谢,先生!我看到您的代码和我的代码之间的区别是使用“Any?”与“UIButton”,以及使用“button”代替“sender”。实际上,我已经尝试了第一部分好几次,但仍然使用“sender”我必须反复思考几次才能了解它。再次感谢!仅为标题投票。我必须尝试想出一些不同的东西。关于类似的问题,有很多问题…:)