无法将“UIView”(0x10d54a4c0)类型的值转换为“UIButton”(0x10d552120)

Posted

技术标签:

【中文标题】无法将“UIView”(0x10d54a4c0)类型的值转换为“UIButton”(0x10d552120)【英文标题】:Could not cast value of type 'UIView' (0x10d54a4c0) to 'UIButton' (0x10d552120) 【发布时间】:2017-02-17 01:06:42 【问题描述】:

已经提出了这样的问题,但我尝试了这些建议,但它仍然对我不起作用。 :/

我正在尝试使用本教程制作一个测验应用程序:https://www.youtube.com/watch?v=KNAQ3Y8PGkM&t=1s

这是一个下载我的项目的链接:https://www.dropbox.com/s/bwvg6fyrrzudued/kat%20quiz.zip?dl=0

一切都很完美,除了我收到错误:

非常感谢一些帮助。我在我的知识和搜索中尝试了一切,谢谢。 :)

    import UIKit

class ViewController: UIViewController 

     let questions = ["What color is Courage the Cowardly Dog?", "What is the name of the woman that lives with Courage?", "What is the name of the man that lives with Courage?"]
     let answers = [["Purple","Grey","Orange"],["Muriel", "Angela", "Elizabeth"], ["Eustace", "Robert", "Ezio"]]

    //Variables
    var currentQuestion = 0
    var rightAnswerPlacement:UInt32 = 0
    var points = 0

    //Label
    @IBOutlet weak var lbl: UILabel!

    //Button
    @IBAction func action(_ sender: AnyObject) 

        if (sender.tag == Int(rightAnswerPlacement))
        
            print ("RIGHT!")
            points += 1
        
        else
        
            print ("WRONG!!!!!!")
        
        if (currentQuestion != questions.count)
        
            newQuestion()
        
        else
            performSegue(withIdentifier: "showScore", sender: self)
        
    

    override func viewDidAppear(_ animated: Bool) 
        newQuestion()
    



    //Function that displays new question
    func newQuestion()
        lbl.text = questions[currentQuestion]
        rightAnswerPlacement = arc4random_uniform(3)+1

        //Create a button
        var button:UIButton = UIButton()

        var x = 1

        for i in 1...3
        
            //Create a button
            button = view.viewWithTag(i) as! UIButton

            if (i == Int(rightAnswerPlacement))
            
                button.setTitle(answers[currentQuestion][0], for: .normal)
            

            else
            
                button.setTitle(answers[currentQuestion][x], for: .normal)
                x = 2
            

        
        currentQuestion += 1
    



    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    



【问题讨论】:

你能澄清一下吗?我对编程非常陌生。谢谢:) 【参考方案1】:

您是否在故事板中创建了 UI 按钮? 在您的 youtube 视频中,观看 1:45

记得将 3 UI Button 的标签设置为 1、2 和 3 观看 3:20

您的问题出现是因为您已将视图的标签设置为 1。

您可以通过将 View 的标记值更改为数字来轻松修复它!= 1、2 和 3

因为您的 ViewController 有 2 个具有相同标签 = 1 的视图。(viewUI Button)。 所以当你使用view.viewWithTag(i)时,它不小心选择了view而不是UI Button。所以它不能转换为UI Button 类型

P/s:下一次,如果你想直接选择你的按钮,你可以为那个 Button 创建一个 @IBOutlet,就像你使用 Label 一样。它不会引起那样的混乱错误

【讨论】:

是的,这两件事我都做了。我只是重做了一次,但仍然有同样的问题:/ 1:45,你是选择了UI Button还是不小心选择了UI View 我选择了 UI 按钮 我在我的项目文件中添加了一个 Dropbox 链接 您的故事板中的问题。因为您的视图标签 = 1。与 Button 的标签重复...我已经编辑了我的答案...见上!

以上是关于无法将“UIView”(0x10d54a4c0)类型的值转换为“UIButton”(0x10d552120)的主要内容,如果未能解决你的问题,请参考以下文章

禁用大小类后 UIView 无法正确显示

如何将额外的参数传递给自定义UIView类以便在swift中进行初始化

如何为单个 UIView 提供两个不同的类引用?

无法使图表对象在自定义UIView中工作

不知道如何使用 Swift 将 UIView 类连接到 IB 中的视图

将 UIView 作为 SubView 添加到自定义类、UIView 的子类、Swift