Почему моя кнопка не работает в Swift Playgrounds? - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь сделать игровую площадку, и у меня есть кнопка с надписью "Давай играть!" и перемещается в новый контроллер вида.

Я посмотрел код с этого сайта и вставил его в мой код:

http://lab.dejaworks.com/ios-swift-3-playground-uibutton-action/

Это весь мой код (вроде всего этого):

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    override func loadView() {

        //Introduction



        let view = UIView()
        view.backgroundColor = .red


        //title

        func labelCool() {

        let label = UILabel()
        label.frame = CGRect(x: 50, y: 300, width: 400, height: 100)
        label.text = "Add-Add - A Wonderful Game!"
        //label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        label.numberOfLines = 3
        label.font = UIFont(name: "HelveticaNeue-Bold", size: 30)

        UILabel.animate (withDuration: 10.0, animations:{
            label.textColor = .black
        })
        UILabel.animate(withDuration: 5.0, animations:{
            label.textColor = .blue
        })
        view.addSubview(label)

        }

        labelCool()

        //subtitle
        let subtitle = UILabel()
        subtitle.frame = CGRect(x: 50, y: 400, width: 200, height: 50)
        subtitle.text = "Curated and Created by Yours Truly, Adit Dayal!"
        subtitle.numberOfLines = 4
        self.view = view
        view.addSubview(subtitle)




    }

     override func viewDidLoad() {
        class Responder : NSObject {
            @objc func action() {
                print("Yay!")
            }
        }


        let responder = Responder()

        //next page
        let button = UIButton(frame : CGRect(x: 0, y: 500, width: 200, height: 50))
        button.setTitle("Let's Play!", for: .normal)
        button.backgroundColor = .blue
        button.addTarget(responder, action: #selector(Responder.action), for: .touchUpInside)
        view.addSubview(button)
    }

}

class gameViewController: UIViewController {

}







// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Пока я просто хочу, чтобы на кнопке отображалось "Yay!" при нажатии, но он ничего не делает! Кто-нибудь знает почему? (Я немного ограничен во времени)

Большое спасибо,

Adit Dayal

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Проблема в том, что вы создаете объект респондента внутри viewDidLoad как локальную переменную; это приводит к уничтожению объекта при завершении функции (но мы хотим, чтобы этот объект был жив даже после). Вы должны сохранить этот объект, поэтому вместо создания локальной переменной создайте переменную экземпляра, просто сохранив ее как область видимости класса:

class Responder : NSObject {
    @objc func action() {
        print("Yay!")
    }
}

let responder = Responder() // this is now outside the viewDidLoad, so it's an instance variable

override func viewDidLoad() {
    //next page
    let button = UIButton(frame : CGRect(x: 0, y: 500, width: 200, height: 50))
    button.setTitle("Let's Play!", for: .normal)
    button.backgroundColor = .blue
    button.addTarget(responder, action: #selector(Responder.action), for: .touchUpInside)
    view.addSubview(button)
}
0 голосов
/ 16 марта 2019

Ваш класс Responder находится внутри функции viewDidLoad (), поместите класс снаружи так:

class Responder : NSObject {
    @objc func action() {
        print("Yay!")
    }
}

override func viewDidLoad() {
    let responder = Responder()

    //next page
    let button = UIButton(frame : CGRect(x: 0, y: 500, width: 200, height: 50))
    button.setTitle("Let's Play!", for: .normal)
    button.backgroundColor = .blue
    button.addTarget(responder, action: #selector(responder.action), for: .touchUpInside)
    view.addSubview(button)
}
...