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.
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. –
danke. Ich werde das im Hinterkopf behalten –
Oh, und überprüfen Sie IBAction Verbindungen auch. –