2016-09-29 5 views
0

Ich verwende ActiveLabel, um URLs in Labels zu behandeln. Um eine UIViewController mit einer WebView zu öffnen, um den Inhalt der URL anzuzeigen, möchte ich eine Delegate-Methode verwenden.Swift/Action auf UILabel Subclass, Delegate-Methode nicht aufgerufen

Ich habe versucht, auf verschiedene Arten mein Problem zu debuggen.

protocol ActiveLabelURLDelegate { 
    func activeLabelURLDelegate(url: NSURL) 
} 

extension FirstVC: ActiveLabelURLDelegate { 

    func activeLabelURLDelegate(url: NSURL) { 

     print("debug activeLabelURLDelegate called") // THIS PRINT WILL NOT CALLED 

     let vc = stb.instantiateViewControllerWithIdentifier("SecondVC") as! SecondVC 

     vc.webSite = url   
     self.navigationController?.pushViewController(vc, animated: true) 
    } 

} 

class Cell: UITableViewCell { 

    @IBOutlet weak var myLabel: ActiveLabel! 
    var labelURLDelegate : ActiveLabelURLDelegate? 


    override func awakeFromNib() { 

     myLabel.handleURLTap { givenURL in 
      print("Success. You just tapped the \(givenURL) URL") // THIS PRINT IS CALLED 
      self.labelURLDelegate?.activeLabelURLDelegate(givenURL) 
     }  
    } 
} 

Nachdem dies nicht funktionierte, implementierte ich eine helfende Funktion, um zu debuggen, was genannt wird.

func openURL(url: NSURL) { 

    print("debug openURL called") // THIS PRINT IS CALLED AS WELL  
    labelURLDelegate?.activeLabelURLDelegate(url) 
} 

Aufruf durch:

myLabel.handleURLTap { givenURL in 
    print("Success. You just tapped the \(givenURL) URL") // STILL CALLED 
    self.openURL(givenURL) 
} 

Wie man auf den Druckanweisungen sehen kann, funktioniert alles, bis die Delegierten Anruf. Die Delegatfunktion activeLabelURLDelegate wird nicht aufgerufen. Was vermisse ich? In derselben Zelle und demselben UIViewController benutze ich 4 andere Delegierte für UIButtons und sie arbeiten perfekt.

PS: Links werden korrekt angezeigt als Links innerhalb der UI & die korrekte URL wird auf der Konsole ausgedruckt.

Antwort

2

Es sieht so aus, als hätten Sie vergessen, den Delegaten zu verbinden. Ich sehe keine Zuweisung zu LabelURLDelegate in Ihrem Zellcode.

+0

Eine gute Faustregel: Wenn der Code so aussieht, als ob er funktionieren sollte, aber nicht, überprüfen Sie die Verbindung zu Ihren Outlets und Delegaten. –

+0

danke. Ich werde das im Hinterkopf behalten –

+0

Oh, und überprüfen Sie IBAction Verbindungen auch. –