2016-07-02 12 views
1

私は、iOS 10のPlaygroundアプリの新しいベータ版に取り組んでいます。 私は遊び場で働くいくつかのUIKit要素を取得したいと思います。 スイフト3はスウィフト2とちょうど相違していますが、いくつか問題があります。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

ReceiverクラスのbuttonClicked関数内でやりとりしたい別のビューを作成しました。どのようにパラメータを渡すことなくこれを行うのですか?プレイグラウンドで。 –

+0

私は一時修正を見つけましたが、それが正しい方法であるかどうかわかりません。私はクラスの外に関数を作成し、buttonClicked関数で呼び出すようにしました。 –

+1

@MaxNelson Receiverクラスund関数の前に別のビュー/オブジェクトを定義している限り、直接アクセスすることもできます – dorbeetle

関連する問題