I want to make a truth or dare game in swift playground for iPad but I can't make a button that prints more than one dare or truth. I tried to make a var that have all dares and then i put it in the (class Responser NSObject )the var looks like this( var dares = ["dare1", "dare 2" ...]) but it is giving me error that says (cannot assign value of type '[String]'to type 'String') and the 2nd thing I tried was (let dares = ["dare 1", "dare 2"…]) that gave me the same error. my code looks like this
import PlaygroundSupport
import UIKit
let View = UIView()
View.backgroundColor = .blue
let lbl = UILabel(frame: CGRect(x: 210, y: 329, width: 200, height: 50))
lbl.text = "hi!"
View.addSubview(lbl)
lbl.textColor = .white
let button = UIButton(frame: CGRect(x: 67, y: 500, width: 100, height: 50))
button.backgroundColor = .green
//button.setTitleColor(#colorLiteral(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0), for: UIControlState.selected)
button.setTitle("button", for: UIControl.State.selected)
button.layer.cornerRadius = 10
View.addSubview(button)
let button1 = UIButton(frame: CGRect(x: 300, y: 500, width: 100, height: 50))
button1.backgroundColor = .red
//button1.setTitleColor(#colorLiteral(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0), for: UIControlState.selected)
button1.setTitle("button1", for: UIControl.State.selected)
button1.layer.cornerRadius = 10
View.addSubview(button1)
class Responser: NSObject
{
//Method to be called
@objc func printname()
{
lbl.text = "1"
}
}
let responder = Responser()
button.addTarget(responder, action: #selector(Responser.printname), for:.touchUpInside)
class Responser1: NSObject
{
//Method to be called
@objc func printname()
{
lbl.text = "2"
}
}
let responder1 = Responser1()
button1.addTarget(responder1, action: #selector(Responser1.printname), for:.touchUpInside)
PlaygroundPage.current.liveView = View
OK. I see where you got the code : https://stackoverflow.com/questions/39878959/how-to-get-a-uibutton-to-perform-action-in-a-swift-playground
And they do set the view frame.
To get a random value, you could change class definitions as:
class Responser: NSObject {
@objc func printname() {
let value = (11...20).randomElement() ?? 2
lbl.text = "\(value)"
}
}
class Responser1: NSObject {
@objc func printname() {
let value = (1...10).randomElement() ?? 2
lbl.text = "\(value)"
}
}
Note: a single class should be enough. Make the distinction between 2 buttons with a tag.
Code becomes:
import PlaygroundSupport
import UIKit
let view = UIView(frame: CGRect(x: 0, y: 20, width: 450, height: 600))
view.backgroundColor = .blue
let lbl = UILabel(frame: CGRect(x: 210, y: 329, width: 200, height: 50))
lbl.text = "hi!"
view.addSubview(lbl)
lbl.textColor = .white
let button = UIButton(frame: CGRect(x: 67, y: 500, width: 100, height: 50))
button.backgroundColor = .green
//button.setTitleColor(#colorLiteral(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0), for: UIControlState.selected)
button.setTitle("button", for: UIControl.State.selected)
button.layer.cornerRadius = 10
view.addSubview(button)
let button1 = UIButton(frame: CGRect(x: 300, y: 500, width: 100, height: 50))
button1.backgroundColor = .red
button1.setTitle("button1", for: UIControl.State.selected)
button1.layer.cornerRadius = 10
view.addSubview(button1)
class Responser: NSObject {
var tag: Int = 0
//Method to be called
@objc func printname() {
var value = 0
switch tag {
case 1: value = (1...10).randomElement() ?? 1
case 2: value = (11...20).randomElement() ?? 2
default: value = 0
}
lbl.text = "\(value)"
}
}
let responder = Responser()
responder.tag = 1
button.addTarget(responder, action: #selector(Responser.printname), for:.touchUpInside)
let responder1 = Responser()
responder1.tag = 2
button1.addTarget(responder1, action: #selector(Responser.printname), for:.touchUpInside)
PlaygroundPage.current.liveView = view