如何隐藏或禁用与相同 IBAction 和不同标签连接的按钮 swift 4.2
how to hide or disable button connected with the same IBAction and different tags swift 4.2
我正在尝试创建一个显示问题的测验应用程序,然后用户将 select 通过按两个按钮 [true / false] 中的一个来回答,然后按下一步按钮移动到下一个问题。
我想隐藏回答按钮或在用户 select 使用其中一个按钮后禁用它们,然后出现下一个按钮。
这两个答案按钮与同一个 IBAction 相关联,但具有不同的标签 [1 用于 true 按钮,2 用于 false 按钮],按钮(下一个)与另一个 IBAction 相关联。
无法访问按钮属性的问题!!
它试过了
answerPressed.isEnabled = false
但每次我打印按钮名称后跟一个点时,我没有任何建议,xcode 给我错误“'.' 后的预期成员名称” “
我唯一的建议是:
answerPressed(sender: AnyObject)
这是该应用程序的完整代码,如有任何帮助请:)
import UIKit
class ViewController: UIViewController {
let allQuestion = QuestionBank()
var questionNumber = 0
var score = 0
var selectedAnswer = true
@IBOutlet weak var checkAnswerLabel: UILabel!
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet var progressBar: UIView!
@IBOutlet weak var progressLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
startOver()
}
@IBAction func answerPressed(_ sender: AnyObject) {
if sender.tag==1{
selectedAnswer = true
}
else if sender.tag == 2 {
selectedAnswer = false
}
let correctAnswer = allQuestion.list[questionNumber].answer
if correctAnswer == selectedAnswer {
checkAnswerLabel.text = "Right "
score += 1
scoreLabel.text = "score : \(score)"
}
else if correctAnswer != selectedAnswer {
checkAnswerLabel.text = "Wrong "
answerPressed(<#T##sender: AnyObject##AnyObject#>)
}
}
@IBAction func nextButtonPressed(_ sender: UIButton) {
if questionNumber < 12 {
questionNumber += 1
questionLabel.text = allQuestion.list[questionNumber].question
checkAnswerLabel.text = ""
progressLabel.text = "\(questionNumber+1)/13"
}
else {
let alert = UIAlertController(title: "Great ", message: "you have rech the end of the quiz, do you want to restart", preferredStyle: .alert)
let restartAction = UIAlertAction(title: "Restart", style: .default, handler: ({
UIAlertAction in
self.startOver()
}))
alert.addAction(restartAction)
present(alert, animated: true, completion: nil)
}
}
func startOver () {
questionNumber = 0
score = 0
print(questionNumber)
questionLabel.text = allQuestion.list[questionNumber].question
scoreLabel.text = "score: \(score)"
progressLabel.text = "\(questionNumber+1)/13"
checkAnswerLabel.text = ""
}
}
谢谢
如果我误解了这个问题,我深表歉意。听起来好像您想在按下其中一个按钮后禁用 true 和 false 按钮。但是,我在您的 IBOutlet 变量列表中没有看到它们中的任何一个。您不能直接引用它们,因为 class 不知道它们。
在 answerPressed 函数中,您可以使用发件人参考来禁用发件人(是或否按钮),但您将无法禁用未被选中的发件人。
我怀疑您需要做的就是为您的 true 和 false 按钮创建 IBOutlets,将它们映射到视图,然后您可以使用它们做任何您喜欢的事情。
我正在尝试创建一个显示问题的测验应用程序,然后用户将 select 通过按两个按钮 [true / false] 中的一个来回答,然后按下一步按钮移动到下一个问题。
我想隐藏回答按钮或在用户 select 使用其中一个按钮后禁用它们,然后出现下一个按钮。
这两个答案按钮与同一个 IBAction 相关联,但具有不同的标签 [1 用于 true 按钮,2 用于 false 按钮],按钮(下一个)与另一个 IBAction 相关联。
无法访问按钮属性的问题!!
它试过了
answerPressed.isEnabled = false
但每次我打印按钮名称后跟一个点时,我没有任何建议,xcode 给我错误“'.' 后的预期成员名称” “ 我唯一的建议是:
answerPressed(sender: AnyObject)
这是该应用程序的完整代码,如有任何帮助请:)
import UIKit
class ViewController: UIViewController {
let allQuestion = QuestionBank()
var questionNumber = 0
var score = 0
var selectedAnswer = true
@IBOutlet weak var checkAnswerLabel: UILabel!
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet var progressBar: UIView!
@IBOutlet weak var progressLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
startOver()
}
@IBAction func answerPressed(_ sender: AnyObject) {
if sender.tag==1{
selectedAnswer = true
}
else if sender.tag == 2 {
selectedAnswer = false
}
let correctAnswer = allQuestion.list[questionNumber].answer
if correctAnswer == selectedAnswer {
checkAnswerLabel.text = "Right "
score += 1
scoreLabel.text = "score : \(score)"
}
else if correctAnswer != selectedAnswer {
checkAnswerLabel.text = "Wrong "
answerPressed(<#T##sender: AnyObject##AnyObject#>)
}
}
@IBAction func nextButtonPressed(_ sender: UIButton) {
if questionNumber < 12 {
questionNumber += 1
questionLabel.text = allQuestion.list[questionNumber].question
checkAnswerLabel.text = ""
progressLabel.text = "\(questionNumber+1)/13"
}
else {
let alert = UIAlertController(title: "Great ", message: "you have rech the end of the quiz, do you want to restart", preferredStyle: .alert)
let restartAction = UIAlertAction(title: "Restart", style: .default, handler: ({
UIAlertAction in
self.startOver()
}))
alert.addAction(restartAction)
present(alert, animated: true, completion: nil)
}
}
func startOver () {
questionNumber = 0
score = 0
print(questionNumber)
questionLabel.text = allQuestion.list[questionNumber].question
scoreLabel.text = "score: \(score)"
progressLabel.text = "\(questionNumber+1)/13"
checkAnswerLabel.text = ""
}
}
谢谢
如果我误解了这个问题,我深表歉意。听起来好像您想在按下其中一个按钮后禁用 true 和 false 按钮。但是,我在您的 IBOutlet 变量列表中没有看到它们中的任何一个。您不能直接引用它们,因为 class 不知道它们。
在 answerPressed 函数中,您可以使用发件人参考来禁用发件人(是或否按钮),但您将无法禁用未被选中的发件人。
我怀疑您需要做的就是为您的 true 和 false 按钮创建 IBOutlets,将它们映射到视图,然后您可以使用它们做任何您喜欢的事情。