ios - 触摸一次后如何使 UIButton 不可点击并隐藏和取消隐藏按钮? - swift

标签 ios swift uibutton

我做了一个测验应用程序。 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/

相关文章:

ios - 如何将 UILabel 添加为 UIButton iOS 的 subview

ios - 打开 ViewController 时出错

ios - +[AVURLAsset isPlayableExtendedMIMEType :] behaves differently when unit tested

swift - 获取已连接屏幕的名称 Swift

ios - Swift - 是否可以为 UIButton 的背景图像设置动画?

ios - Swift - 如何使 UIButton 仅在附加图像上点击交互并忽略透明部分

iOS swift 如何在需要返回值的函数内等待异步任务

iOS 崩溃说 : [NSURLSessionDataTask state]: unrecognised selector sent to instance

ios - SwiftUI:无法推断通用参数 'C0'

ios - 快速键盘听不到输入声音