我做了一个测验应用程序。 1)如果每个问题被触摸一次,我希望带有答案的按钮不可点击。2)我还想在每次用户移动到下一个答案时隐藏和取消隐藏“下一个问题”按钮。例如问题 1。下一个问题按钮被隐藏 --> 用户触摸一个答案 --> 所有答案按钮变得不可点击(1)我想这样做)--> 下一个问题按钮未隐藏(< strong>2) 我想这样做)。
import UIKit
struct Question {
var Question: String!
var Answers: [String]!
var Answer: Int!
init(item: [String: Any])
{
self.Question = item["Question"] as? String
self.Answers = item["Answers"] as? [String]
self.Answer = item["Answer"] as? Int
}
}
class LittleTestViewController: UIViewController {
//MARK: Properties
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet var buttons: [UIButton]!
@IBOutlet weak var Next: UIButton!
var Questions = [Question]()
var QNumber = Int()
var answerNumber = Int()
var score = Int()
override func viewDidLoad() {
super.viewDidLoad()
Hide()
jsonParsingQuestionsFile()
pickQuestion()
}
func jsonParsingQuestionsFile ()
{
if let path = Bundle.main.path(forResource: "data", ofType: "json")
{
if let array = (try? JSONSerialization.jsonObject(with: Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe), options: JSONSerialization.ReadingOptions.allowFragments)) as? [[String : Any]]
{
for item in array
{
self.Questions.append(Question(item: item))
}
}
}
}
func pickQuestion ()
{
if Questions.count > 0 {
QNumber = 0
questionLabel.text = Questions[QNumber].Question
answerNumber = Questions[QNumber].Answer
for i in 0..<buttons.count{
buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState.normal)
}
Questions.remove(at: QNumber)
}
else
{
let alert = UIAlertController(title: "Σκόρ", message: "Απάντησες σωστάς τις \(score) ερωτήσεις από τις 3", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Μενού", style: UIAlertActionStyle.default, handler: { action in
self.navigationController?.popToRootViewController(animated: true)
}))
self.present(alert, animated: true, completion: nil)
}
}
func Hide()
{
Next.isHidden = true
}
func Unhide()
{
Next.isHidden = false
}
@IBAction func bt1(_ sender: UIButton) {
Unhide()
if answerNumber == 0 {
sender.backgroundColor = UIColor.green
score+=1
}
else
{
sender.backgroundColor = UIColor.red
}
}
@IBAction func btn2(_ sender: UIButton) {
Unhide()
if answerNumber == 1 {
sender.backgroundColor = UIColor.green
score+=1
}
else
{
sender.backgroundColor = UIColor.red
}
}
@IBAction func btn3(_ sender: UIButton) {
Unhide()
if answerNumber == 2 {
sender.backgroundColor = UIColor.green
score+=1
}
else
{
sender.backgroundColor = UIColor.red
}
}
@IBAction func btn4(_ sender: UIButton) {
Unhide()
if answerNumber == 3 {
sender.backgroundColor = UIColor.green
score+=1
}
else
{
sender.backgroundColor = UIColor.red
}
}
@IBAction func Next(_ sender: Any)
{
pickQuestion()
}
}
最佳答案
让按钮不可点击:
myAnswerButton.isEnabled = false
隐藏下一个问题按钮:
myNextQuestionButton.isHidden = true
取消隐藏下一个问题按钮:
myNextQuestionButton.isHidden = false
像这样定义你的按钮:
@IBOutlet weak var btn1: UIButton!
@IBOutlet weak var btn2: UIButton!
@IBOutlet weak var btn3: UIButton!
@IBOutlet weak var btn4: UIButton!
创建一个禁用所有按钮的函数:
private func disableAllAnswerButtons() {
btn1.isUserInteractionEnabled = false
btn2.isUserInteractionEnabled = false
btn3.isUserInteractionEnabled = false
btn4.isUserInteractionEnabled = false
}
您需要再次启用另一个功能:
private func enableAllAnswerButtons() {
btn1.isUserInteractionEnabled = true
btn2.isUserInteractionEnabled = true
btn3.isUserInteractionEnabled = true
btn4.isUserInteractionEnabled = true
}
在取消隐藏功能中禁用它们:
func Unhide()
{
Next.isHidden = false
disableAllAnswerButtons()
}
按下一个问题按钮时再次启用它们:
@IBAction func Next(_ sender: Any)
{
pickQuestion()
enableAllAnswerButtons()
}
关于ios - 触摸一次后如何使 UIButton 不可点击并隐藏和取消隐藏按钮? - swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086361/