ios - 塞格街的噩梦
问题描述
应用程序应该做什么:
1) 用户在 textField 中输入一个单词并点击相应的按钮
2) 应用程序应该转到另一个包含两个标签的场景。一个应该显示用户输入的单词,另一个标识被点击的按钮。这些数据应该通过接收 ViewController 上的属性传递。
它实际上做了什么:
1) segue 立即被调用,显然绕过prepare(segue: sender:)
2) 两个标签都是空白的
3) 断点并print()
指示prepare(segue: sender:)
从不调用
我检查过/尝试过的内容:
1)根据我的print()
陈述,按钮在情节提要中具有正确的标签
2)我已经替换if else
了switch
3)我很确定我已经阅读了关于 SO 的所有相关问题和答案
4 sender
)prepare(segue: sender:)
再次来回Any?
切换UIButton
编码
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
参数的类型。
sender
例如,在额外的行中转换为预期的类型
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue",
let button = sender as? UIButton {
...
并将所有后续出现的 替换sender
为button
推荐阅读
- flutter - 如何使用相机插件调整相机预览的大小并仅在颤动中捕获调整后的预览
- spring - Spring Cloud Stream 中的队列过滤
- javascript - 类型错误:firebase_compat_app__WEBPACK_IMPORTED_MODULE_4__.default.auth 不是函数
- javascript - 我试图在 discord.js 中为我的机器人创建一个合作伙伴命令
- flutter - ListView 内 PageView 中的 RangeError
- wifi - 无线到以太网数据包
- sql - 在 Oracle DB 中使用 REGEXP_LIKE 函数
- sql - 当 .... 然后 .... 的 SQL 表达式无法正常工作
- sharepoint - Power Automate , 列出当前表中的行
- python - 如何公开 Python 服务器?