2016-09-15 6 views
1

Ich habe benutzerdefinierte Schaltflächenklasse erstellt und überschreiben alle Berührungsmethoden. Es funktioniert gut in swift 2 und Xcode 7.3.1. Aber wenn ich in Xcode 8.0 gleiche App öffnen, wird es Fehler zeigen:Wert des Typs 'CustomButton' hat kein Mitglied 'touchDown'

Wert vom Typ ‚Custombutton‘ Nein ‚Touchdown‘ Mitglied hat

Wert vom Typ ‚Custombutton‘ hat kein Mitglied ‚touchUpInside‘

Werte vom Typ ‚Custombutton‘ haben kein Mitglied ‚touchDragExit‘

Werte vom Typ ‚Custombutton‘ hat kein Mitglied

Werte vom Typ ‚touchDragEnter‘ ‚Custom Button‘hat kein Mitglied 'touchcancel'

Hier ist mein Code:

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 
    } 
} 

Wenn jemand eine Lösung haben, lassen Sie es mich wissen.

Antwort

1

Wenn Sie Ihre Methodenheader wie in Ihrem Code beibehalten möchten, müssen Sie die Selektorverweise auf #selector(touchDown(sender:)) und so weiter ändern.

(In der Regel haben Sie keine Notwendigkeit, self. Präfix.)

alle Funktionen Erinnern Sie sich und Methoden nun konsistent Label Behandlung für ihre ersten Parameter. SE-0046

(. Sie können viele gute Artikel finden, mit „swift3 Selektor“ gesucht)

Wenn Sie die Wähler Referenzen behalten möchten, müssen Sie die Methoden ändern wie:

func touchDown(_ sender: CustomButton) { 

Darüber hinaus würde #selector(touchDown) funktionieren, wenn Ihre Klasse nur eine touchDown(...) Methode hat.

+0

Danke .... Es funktioniert ... – VRAwesome

0

Ich habe eine Lösung als @OOPer vorgeschlagen, aber es muss auch UIControlEvents in kleinen Fall geändert werden. In Xcode 7.3.1 war es UIControlEvents.TouchDown, aber jetzt muss es UIControlEvents.touchDown sein.

Es wird wie:

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) 
Verwandte Themen