2016-09-03 2 views
0

ich ein UIButton habe likeButton, die likeBtnClicked auf .TouchUpinsideHinzufügen Parent als Ziel UIButton

likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

Dies funktioniert gut, aber mit Warnung

„Keine Methode deklariert mit Objective-C-Selektor nennen ".

Wenn likeButton wird in einer Klasse implementiert (sagen MyClass), dann würde ich es ersetzt mit

likeButton.addTarget(Myclass, action: #selector(Myclass.likeBtnClicked), forControlEvents: UIControlEvents.TouchUpInside) 

Aber wie es für mehrere Klassen (Viewcontrollers), die ‚Like‘ verwenden möchte funktioniert ohne irgendwelche Warnungen ?? Diese Frage gilt auch für UITapGestureRecognizer. Hier

ist der Beispielcode:

import Foundation 

class SubClass: UIView { 

    var likeButton = UIButton(frame: CGRectMake(0,0,100,50)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(likeButton) 
     likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

class SuperClassA: UIView { 

    let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(viewHavingBtn) 
    } 

    func likeBtnClicked(sender: AAButton) { 
     print(sender.tag) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

class SuperClassB: UIView { 

    let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(viewHavingBtn) 
    } 

    func likeBtnClicked(sender: AAButton) { 
     print(sender.tag) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

Sie sollten ein Delegatenmuster verwenden. Es ist eine schlechte Idee für Ihr UiView anzunehmen, dass der Superview eine bestimmte Methode implementiert. – Paulw11

+0

Danke :) @ Paulw11 –

Antwort

0

folgenden Schritte aus:

1] ein UIButton Objekt in der übergeordneten Klasse

2 erklären], dass die Taste initialisieren und fügen Ziel dieser Taste in Superklassen-Initialisierungsmethode

3] Definieren einer Aktionsmethode für das Berührungsereignis in der Oberklasse

4], dass die Taste als Subview in der Unterklasse hinzufügen Schaltfläche

5] Überbrückungstaste Aktionsmethode in der Unterklasse von der Super Implementierung anzuzeigen, in dem Sie Taste berührt behandeln möchten.

Verwandte Themen