Ich habe eine Label-Erweiterung geschrieben, die Links im Etikett erkennen. Es ist Text mit NSLinkAttributeName für Links zugeordnet und ich verwende func handleTapOnLabel(_ tapGesture:UITapGestureRecognizer){}
zu erkennen, wo ist der Tap und welchen Link zu öffnen öffnen. Das Problem ist, dass ich die Funktion in der Erweiterung für UILabel benutze und ich möchte einen UIAlertController vorstellen, um die Person zu fragen - "Sie sind dabei, diesen Link in Safari zu öffnen. Möchten Sie fortfahren?" ... Also kann ich nicht Zugriff ViewController, um die Funktion present(UIAlertController...
zu verwenden, um die Warnung anzuzeigen. Irgendwelche Vorschläge, wie dies in Erweiterung geschehen kann? Wie kann man direkt von der Erweiterung auf den Viewcontroller des Labels zugreifen?Swift - Präsentieren UIAlertController in Erweiterung-Funktion
Antwort
Methode 1) Derzeitiger UIAlertController auf den meisten Viewcontroller in Viewcontroller Hierarchie
extension UILabel { //your extension
func openLinkAction() { //your extension custom method
//code
if var topController = UIApplication.sharedApplication().keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
}
// topController should now be your topmost view controller
// present alert on this controller
}
//and present here with vcInstance
}
}
Methode 2) Objekt Pass Viewcontroller als Parameter
extension UILabel { //your extension
func openLink(vc: UIViewController) { //your extension custom method function
// code
// present alert on this vc
}
}
// Für die meisten Controller immer Top-ca Sie verwenden ..
extension UIApplication {
class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}
// topController
if let topController = UIApplication.topViewController() {
}
Ich möchte nicht Methode 2 verwenden, weil ich in 1000 Funktionen implementieren muss (vc: UIViewController) ... über 1. Methode habe ich versucht, aber topController.presentedViewController ist immer Null? irgendwelche anderen Methoden oder Vorschläge? –
Jetzt den Code für topController überprüfen – ERbittuu
- 1. Swift: Vorhanden UIAlertController in Schließung
- 2. Präsentieren UIAlertController im gerade aktiven UIViewController
- 3. von einem UIAlertController Präsentieren innerhalb eines Popover in iOS8
- 4. Swift Versuch, UIAlertController zu präsentieren, dessen Ansicht nicht in der Fensterhierarchie ist (dargestellt nach TWTRShareEmailViewController)
- 5. Wie drehen UIAlertController in Swift
- 6. UIAlertController EXC_BAD_ACCESS Fehler - Swift
- 7. Swift wie UIAlertController Titelhöhe
- 8. Versuch, UIAlertController auf dem bereits vorhandenen View Controller zu präsentieren (null) [Swift]
- 9. Versuch, UIViewController auf ViewController zu präsentieren, der bereits UIAlertController präsentiert
- 10. Swift UIAlertController mit benutzerdefinierter Nachricht
- 11. UIAlertController wird nicht angezeigt - In Swift
- 12. Löse die UIAlertController-Tastatur in Swift 2.3
- 13. Warnung - Versuch, UIAlertController Null in Swift
- 14. swift show Array von Fehlermeldungen in UIAlertController
- 15. UIAlertController Verwenden einer Hilfsklasse in Swift 3.0
- 16. Wie packen benutzerdefinierte UIAlertController in einer Klasse (swift)?
- 17. Admob: Interstitial nicht bereit zu präsentieren, warum? (Swift)
- 18. Present UIAlertController von AppDelegate
- 19. Swift: UIAlertController nicht innerhalb von dispatch_async
- 20. Swift UIAlertController deaktivieren Return-Taste ohne UITextField
- 21. UIAlertController funktioniert nicht mit Swift 3.0
- 22. Warnung: Versuch, UIAlertController auf UISplitViewController zu präsentieren, dessen Ansicht nicht in der Fensterhierarchie enthalten ist
- 23. Versuch, UIAlertController zu präsentieren, dessen Ansicht nicht in der Fensterhierarchie mit localnotification ist
- 24. Swift 2, nicht erkannter Selektor an Instanz für UIAlertController gesendet
- 25. Präsentieren eines ViewController auf einer XIB-Datei in SWIFT
- 26. Wie Titel/Nachrichtenrahmen in einem UIAlertController verstecken?
- 27. Swift UIAlertController -> ActionSheet iPad iOS8 stürzt ab
- 28. Wie Autocomplete für das Textfeld von UIAlertController in swift
- 29. Wie kann man einen UIAlertController ohne Aktionen in SWIFT abweisen?
- 30. Keep Tastatur eingeschaltet, wenn UIAlertcontroller in Swift dargestellt wird?
1) Sie können das ViewController-Objekt (vcObj) in der Extension-Methode übergeben. 2) Sie können UIAlertController auf dem obersten ViewController in der ViewController-Hierarchie darstellen. – ERbittuu
Überprüfen Sie diese https://StackOverflow.com/questions/32010153/make-clickable-uilabel-using-Swift – Jack