2017-02-21 5 views
0

スウィフト#selectorが正しく理解されていないように感じます。私は別のクラスのメソッドにボタンを接続しようとしています。Swift 3クラスのメソッドがセレクタの構文で動作しない

押されたときに、私はボタンを印刷するクラスを持っている:

class printThings { 
    @IBAction func printMe(_ sender: UIButton){ 
     print("Button Pushed.") 
    } 
} 

そしてのViewController:

class ViewController : UIViewController { 
    override func ViewDidLoad(){ 
     super.viewDidLoad() 
    //button setup here 
    let printMe = printThings() 
    button.addTarget(printMe, action: #selector(printMe.printMe(_:)), for: .touchUpInside) 
    //add button to subview 
    } 
} 

これは、クラスのprint文をトリガーすることはありません。私は何かシンプルなものが欠けていると確信しています

ありがとうございました。

答えて

0

問題はprintMeは、一時、ローカル変数であるということである。

let printMe = printThings() // local variable 
button.addTarget(printMe, action: #selector(printMe.printMe(_:)), for: .touchUpInside) 
// ... and then viewDidLoad ends, and `printMe` vanishes 

ですから、ボタンを押す時間によって、printMeが消えました。ボタンメッセージを送信する人はいません。

あなたはこれが仕事をしたい場合、あなたはprintMeが持続行う必要があります。

class ViewController : UIViewController { 
    let printMe = printThings() // now it's a _property_ and will persist 
    override func viewDidLoad(){ 
     super.viewDidLoad() 
     //button setup here 
     button.addTarget(self.printMe, action: #selector(self.printMe.printMe(_:)), for: .touchUpInside) 
     //add button to subview 
    } 
} 
関連する問題