2017-02-17 23 views
0

, был вопрос, как это уже сделано, но я пробовал предложения, и это не помогло мне. :/Не удалось присвоить значение типа «UIView» (0x10d54a4c0) в «UIButton» (0x10d552120)

Я пытаюсь сделать приложение викторины с помощью этого учебника: https://www.youtube.com/watch?v=KNAQ3Y8PGkM&t=1s

Вот ссылка для загрузки моего проекта: https://www.dropbox.com/s/bwvg6fyrrzudued/kat%20quiz.zip?dl=0

Все отлично, кроме я получаю ошибку:

Could not cast value of type 'UIView' (0x10d54a4c0) to 'UIButton' (0x10d552120)

Я очень благодарен за помощь. Я пробовал все, что знал и искал, спасибо. :)

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. 
    } 


} 
+0

Не могли бы вы уточнить причину? Я супер новичок в программировании. Спасибо :) –

ответ

0

Вы создали кнопку пользовательского интерфейса в своей истории? В вашем YouTube видео, смотреть 1:45

И не забудьте установить тег вашего 3 Кнопка УИ на 1, 2 и 3 часы 3:20

Ваша проблема возникает потому, что вы установили тег ваш взгляд в = 1.

Вы можете исправить это легко изменить View по значению тега к ряду! = 1, 2 и 3

Поскольку ваш ViewController имеют 2 вид с тем же тегом = 1 . (view и UI Button). Итак, когда вы используете view.viewWithTag(i), он случайно выбирает view не UI Button. Поэтому он не может преобразовать UI Button типа

P/S: в следующий раз, если вы хотите, чтобы выбрать кнопку сразу, то вы можете сделать @IBOutlet для этого Button, как вы сделаете с Label. Это не приведет к ошибке в ошибке

+0

Да, я сделал это. Я просто переделал его снова, но все еще имею такую ​​же проблему:/ –

+0

В 1:45 Вы выбрали ** UI Button ** или вы случайно выбрали ** UI View **? –

+0

Я выбрал кнопку пользовательского интерфейса –

 Смежные вопросы

  • Нет связанных вопросов^_^