.tag 在尝试在 Swift 4 中搜索 3 个可能的值时不起作用
.tag is not working when trying to segue 3 possible values in Swift 4
我需要根据用户选择的任何 FIRE BUTTON 在视图控制器之间选择 3 个可能的值。我可以传递一个值,但我只能传递一个值。我尝试使用 .tag 来获取正确的值,但它不起作用。我想我想做什么很清楚。我现在无法传输 3 个可能的值。
let FIRE = UIButton()
let FIRE2 = UIButton()
let FIRE3 = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(FIRE)
let image = UIImage(named: "a.png") as UIImage?
FIRE.setImage(image, for: .normal)
FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 200).isActive = true
FIRE.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE.translatesAutoresizingMaskIntoConstraints = false
FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
view.addSubview(FIRE2)
let image2 = UIImage(named: "b.png") as UIImage?
FIRE2.setImage(image2, for: .normal)
FIRE2.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE2.topAnchor.constraint(equalTo: view.topAnchor, constant: 400).isActive = true
FIRE2.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE2.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE2.translatesAutoresizingMaskIntoConstraints = false
FIRE2.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
view.addSubview(FIRE3)
let image3 = UIImage(named: "c.png") as UIImage?
FIRE3.setImage(image3, for: .normal)
FIRE3.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE3.topAnchor.constraint(equalTo: view.topAnchor, constant: 600).isActive = true
FIRE3.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE3.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE3.translatesAutoresizingMaskIntoConstraints = false
FIRE3.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
}
@objc func handleRegisterb(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 1
}
@objc func handleRegisterb2(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 2
}
@objc func handleRegisterb3(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 3
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
if FIRE.tag == 1 {
let vc = segue.destination as! ViewController
vc.score = "a"
}
if FIRE.tag == 2 {
let vc = segue.destination as! ViewController
vc.score = "b"
}
if FIRE.tag == 3 {
let vc = segue.destination as! ViewController
vc.score = "c"
}
}
}
您可以在 performSegue
方法中发送所选标签作为 sender
、
的一部分
@objc func handleRegisterb(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 1)
}
@objc func handleRegisterb2(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 2)
}
@objc func handleRegisterb3(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 3)
}
然后在prepare
方法中根据标签值分配score
,
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
let tag = sender as! Int
let vc = segue.destination as! ViewController
if tag == 1 {
vc.score = "a"
} else if tag == 2 {
vc.score = "b"
} else if tag == 3 {
vc.score = "c"
}
}
}
您需要 1 个这样的操作,并将按钮的标签设置为 0,1,2
@objc func forAll(sender: UIButton){
performSegue(withIdentifier: "beg", sender:sender.tag)
}
然后
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
let vc = segue.destination as! ViewController
let arr = ["a","b","c"]
vc.score = arr[sender as! Int]
}
}
你所有的按钮都有相同的功能handleRegisterb
必须为每个按钮分配其功能(e.x。):
FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
FIRE2.addTarget(self, action:#selector(handleRegisterb2), for: .allTouchEvents)
FIRE3.addTarget(self, action:#selector(handleRegisterb3), for: .allTouchEvents)
并且在所有函数中需要在调用performSegue(withIdentifier: "beg", sender: self)
函数之前分配FIRE.tag
(e.x):
@objc func handleRegisterb(sender: UIButton) {
FIRE.tag = 1
performSegue(withIdentifier: "beg", sender: self)
}
我需要根据用户选择的任何 FIRE BUTTON 在视图控制器之间选择 3 个可能的值。我可以传递一个值,但我只能传递一个值。我尝试使用 .tag 来获取正确的值,但它不起作用。我想我想做什么很清楚。我现在无法传输 3 个可能的值。
let FIRE = UIButton()
let FIRE2 = UIButton()
let FIRE3 = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(FIRE)
let image = UIImage(named: "a.png") as UIImage?
FIRE.setImage(image, for: .normal)
FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 200).isActive = true
FIRE.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE.translatesAutoresizingMaskIntoConstraints = false
FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
view.addSubview(FIRE2)
let image2 = UIImage(named: "b.png") as UIImage?
FIRE2.setImage(image2, for: .normal)
FIRE2.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE2.topAnchor.constraint(equalTo: view.topAnchor, constant: 400).isActive = true
FIRE2.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE2.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE2.translatesAutoresizingMaskIntoConstraints = false
FIRE2.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
view.addSubview(FIRE3)
let image3 = UIImage(named: "c.png") as UIImage?
FIRE3.setImage(image3, for: .normal)
FIRE3.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
FIRE3.topAnchor.constraint(equalTo: view.topAnchor, constant: 600).isActive = true
FIRE3.widthAnchor.constraint(equalToConstant: 250).isActive = true
FIRE3.heightAnchor.constraint(equalToConstant: 100).isActive = true
FIRE3.translatesAutoresizingMaskIntoConstraints = false
FIRE3.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
}
@objc func handleRegisterb(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 1
}
@objc func handleRegisterb2(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 2
}
@objc func handleRegisterb3(sender: UIButton){
performSegue(withIdentifier: "beg", sender: self)
FIRE.tag = 3
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
if FIRE.tag == 1 {
let vc = segue.destination as! ViewController
vc.score = "a"
}
if FIRE.tag == 2 {
let vc = segue.destination as! ViewController
vc.score = "b"
}
if FIRE.tag == 3 {
let vc = segue.destination as! ViewController
vc.score = "c"
}
}
}
您可以在 performSegue
方法中发送所选标签作为 sender
、
@objc func handleRegisterb(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 1)
}
@objc func handleRegisterb2(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 2)
}
@objc func handleRegisterb3(sender: UIButton){
performSegue(withIdentifier: "beg", sender: 3)
}
然后在prepare
方法中根据标签值分配score
,
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
let tag = sender as! Int
let vc = segue.destination as! ViewController
if tag == 1 {
vc.score = "a"
} else if tag == 2 {
vc.score = "b"
} else if tag == 3 {
vc.score = "c"
}
}
}
您需要 1 个这样的操作,并将按钮的标签设置为 0,1,2
@objc func forAll(sender: UIButton){
performSegue(withIdentifier: "beg", sender:sender.tag)
}
然后
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "beg") {
let vc = segue.destination as! ViewController
let arr = ["a","b","c"]
vc.score = arr[sender as! Int]
}
}
你所有的按钮都有相同的功能handleRegisterb
必须为每个按钮分配其功能(e.x。):
FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
FIRE2.addTarget(self, action:#selector(handleRegisterb2), for: .allTouchEvents)
FIRE3.addTarget(self, action:#selector(handleRegisterb3), for: .allTouchEvents)
并且在所有函数中需要在调用performSegue(withIdentifier: "beg", sender: self)
函数之前分配FIRE.tag
(e.x):
@objc func handleRegisterb(sender: UIButton) {
FIRE.tag = 1
performSegue(withIdentifier: "beg", sender: self)
}