

UIButtonへメソッドを結びつける際、selfだと、下記のように書けば良いですが、他のクラスのインスタンスメソッドを結びつけるにはどうしたら良いでしょうか？  
また、参考になるサイトがあれば教えて下さい。

[code]

    myButton.addTarget(self, action: "myFunction", forControlEvents: .TouchUpInside)
    
[/code]


CC BY-SA 3.0
2016-02-11T11:16:19.947
21980
2016-03-12T12:33:06.990
question
ios swift
UIButtonへメソッドへ別クラスのメソッドを結びつける方法


_他のクラスのインスタンス_ に必要な情報を持たせておくは面倒なのであまりしませんが、`self`の代わりに _他のクラスのインスタンス_
を渡すだけなので、次のようにすれば良いだけです。

[code]

        myButton.addTarget(theInstanceOfOtherClass, action: "myFunction", forControlEvents: .TouchUpInside)
    
[/code]

[UIControl Class
Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/)  
当然ながら、`theInstanceOfOtherClass`はこの行を呼ぶ前にインスタンスが生成されており、そのインスタンスはアクションメソッドが呼ばれる可能性のある間ずっと保持されている必要があります。普通ならUIButtonがあるのと同じViewControllerのインスタンスプロパティにするところでしょう。

そうすると、大枠はざっとこんな感じになります。

[code]

    class OtherClass {
        @objc func myFunction() {
            //...
        }
    }
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var myButton: UIButton!
    
        var theInstanceOfOtherClass = OtherClass()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            myButton.addTarget(theInstanceOfOtherClass, action: "myFunction", forControlEvents: .TouchUpInside)
            //...
        }
    
        //...
    }
    
[/code]

本当のところは何がしたいのかよくわからないのですが、場合によってはdelegateパターンを採用するなど、他の方法を考えた方が良いかもしれません。


CC BY-SA 3.0
2016-02-11T11:43:04.307
21981
2016-02-11T11:43:04.307
13972
21980
answer