2016-09-15 19 views
1

私はカスタムボタンクラスを作成し、すべてのタッチメソッドをオーバーライドしました。 swift 2Xcode 7.3.1では正常に動作します。 「CustomButtonは」いいえメンバー「タッチダウン」「CustomButtonが」いいえメンバー「touchUpInside」タイプ 'CustomButton'の値にメンバー 'touchDown'がありません

を持っていないタイプの

値を持つタイプの

値:私はXcode 8.0で同じアプリを開いたときしかし、それはエラーが表示されますタイプ 'CustomButton' の

値はNOメンバー 'touchDragExit' タイプの

値を持たない 'CustomButton' はないメンバーカスタム」タイプの 'touchDragEnter'

値はありませんボタンはここにtouchCancel 『

」はメンバーがいる』私のコードではありません:

import UIKit 

@IBDesignable 
@objc public class CustomButton: UIButton { 

    private func addTargets() { 

     //------ add target ------- 

     self.addTarget(self, action: #selector(self.touchDown(_:)), for: UIControlEvents.TouchDown) 
     self.addTarget(self, action: #selector(self.touchUpInside(_:)), for: UIControlEvents.TouchUpInside) 
     self.addTarget(self, action: #selector(self.touchDragExit(_:)), for: UIControlEvents.TouchDragExit) 
     self.addTarget(self, action: #selector(self.touchDragEnter(_:)), for: UIControlEvents.TouchDragEnter) 
     self.addTarget(self, action: #selector(self.touchCancel(_:)), for: UIControlEvents.TouchCancel) 
    } 

    func touchDown(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchUpInside(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragExit(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragEnter(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchCancel(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 
} 

誰もが任意のソリューションを持っている場合は、私に知らせてください。

答えて

1

メソッドヘッダーをコードのままにしたい場合は、セレクタ参照を#selector(touchDown(sender:))に変更するなどが必要です。

は(一般的に、あなたはself.を先頭に付加する必要がない。)

すべての関数とメソッドを覚えて、今彼らの最初のパラメータの一貫性のあるラベル処理を持っています。

func touchDown(_ sender: CustomButton) { 

SE-0046

(。あなたが「swift3セレクタ」で検索、多くの良い記事を見つけることができます)

を使用すると、セレクタの参照を保持したい場合は、次のような方法を変更する必要があります

あなたのクラスにtouchDown(...)メソッドが1つしかない場合は、#selector(touchDown)が機能します。

+0

おかげで....それは動作します... – VRAwesome

0

私は解決策を見つけましたが、小文字でUIControlEventsを変更する必要があります。 Xcode 7.3.1ではUIControlEvents.TouchDownでしたが、現在はUIControlEvents.touchDownでなければなりません。

それは次のようになります:

self.addTarget(self, action: #selector(touchDown(sender:)), for: UIControlEvents.touchDown) 
self.addTarget(self, action: #selector(touchUpInside(sender:)), for: UIControlEvents.touchUpInside) 
self.addTarget(self, action: #selector(touchDragExit(sender:)), for: UIControlEvents.touchDragExit) 
self.addTarget(self, action: #selector(touchDragEnter(sender:)), for: UIControlEvents.touchDragEnter) 
self.addTarget(self, action: #selector(touchCancel(sender:)), for: UIControlEvents.touchCancel) 
関連する問題