2016-07-02 4 views
1

Я работаю с новой бета-версией приложения Playground в iOS 10. Я хочу получить некоторые элементы UIKit, работающие на игровой площадке. Swift 3 просто отличается от Swift 2, у меня проблемы.Создание кнопки в приложении Playground на iPad

У меня есть ярлык и текстовое поле, но я не могу заставить кнопку работать. У меня есть кнопка, которая появляется, но не может получить текст в ней или действие, воздействующее на прикосновение. Вот мой код, который у меня есть.

import PlaygroundSupport 
import UIKit 

// 
let view = UIView() 
view.backgroundColor = #colorLiteral(red: 0.909803926944733, green: 0.47843137383461, blue: 0.643137276172638, alpha: 1.0) 
PlaygroundPage.current.liveView = view 

let lbl = UILabel(frame: CGRect(x: 50, y: 0, width: 200, height: 50)) 
lbl.text = "Hello, World!" 
view.addSubview(lbl) 

let txt = UITextField(frame: CGRect(x: 150, y: 200, width: 200, height: 50)) 
//txt.placeholder = "Enter text here" 
//txt.font = UIFont.systemFont(ofSize: 15) 
txt.borderStyle = UITextBorderStyle.roundedRect 
view.addSubview(txt) 

func buttonPressed(sender: UIButton) 
{ 
    //sender.backgroundColor = #colorLiteral(red: 0.725490212440491, green: 0.47843137383461, blue: 0.0980392172932625, alpha: 1.0) 
} 

let button = UIButton(frame: CGRect(x: 50, y: 100, width: 100, height: 50)) 
button.backgroundColor = #colorLiteral(red: 0.721568644046783, green: 0.886274516582489, blue: 0.592156887054443, alpha: 1.0) 
button.setTitleColor(#colorLiteral(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0), for: UIControlState.focused) 
button.setTitle("button", for: UIControlState.focused) 
button.layer.cornerRadius = 10 
button.addTarget(button, action: "buttonPressed", for: UIControlEvents.touchUpInside) 
view.addSubview(button) 

ответ

5

Я пытался то же самое, и следующий код работает для меня:

import UIKit 
import PlaygroundSupport 

class Receiver { 
    @objc func buttonClicked() { 
     print("click") 
    } 
} 

let view = UIView() 
view.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) 
let receiver = Receiver() 
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 50)) 
button.setTitle("TestButton", for: .normal) 
button.setTitleColor(#colorLiteral(red: 0.474509805440903, green: 0.839215695858002, blue: 0.976470589637756, alpha: 1.0), for: .normal) 
button.addTarget(receiver, action: #selector(Receiver.buttonClicked), for: .touchUpInside) 
PlaygroundPage.current.liveView = view 
view.addSubview(button) 

Я считаю, что важным отличием является то, что вы добавляете кнопку в качестве мишени .touchUpInside события. К сожалению, кнопка не реализует ваш метод buttonPressed (он определен только на игровой площадке, а не как часть класса UIButton). Поскольку на общей игровой площадке нет self (для ссылки на написанную вами функцию), я завернул ее в новый класс и использовал экземпляр этого класса для приема события .touchUpInside.

+0

Я создал другой вид, с которым я хочу взаимодействовать внутри моей функции «ClickClicked» в классе Receiver. Как вы это делаете без прохождения параметров? На игровой площадке. –

+0

Я нашел исправление temp, но не знаю, правильно ли это сделать. Я создал функцию вне класса и вызывается функция buttonClicked. –

+1

@MaxNelson Пока вы определяете другой объект/объект перед классом приемника und function, вы также должны иметь доступ к нему напрямую – dorbeetle