我寫了一個標籤擴展檢測標籤中的鏈接。 它是鏈接的NSLinkAttributeName的歸因文本,我使用 func handleTapOnLabel(_ tapGesture:UITapGestureRecognizer){}
來檢測點擊在哪裏以及要選擇打開哪個鏈接。問題是我使用UILabel的擴展函數,我想提出一個UIAlertController來詢問這個人 - 「你將在Safari中打開這個鏈接,你想繼續嗎?」...所以我不能訪問視圖控制器以使用功能present(UIAlertController...
來顯示警報。任何建議如何在擴展中發生這種情況?如何直接從擴展訪問標籤的視圖控制器?Swift - 現在在擴展功能UIAlertController
0
A
回答
1
方法1)在視圖控制器的層次
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
}
}
方法2)合格的ViewController的對象上最頂端的ViewController目前UIAlertController作爲參數
extension UILabel { //your extension
func openLink(vc: UIViewController) { //your extension custom method function
// code
// present alert on this vc
}
}
//爲了得到你CA使用最上面的控制器..
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() {
}
+0
我不想使用方法2,因爲我必須在1000個函數中實現(vc:UIViewController)...關於我嘗試過的第一種方法,但topController.presentedViewController總是零?任何其他方法或建議? –
+0
現在檢查topController的代碼 – ERbittuu
相關問題
- 1. 今天擴展UIAlertController功能不可
- 2. Jquery擴展現有功能
- 3. Swift:擴展print()函數的功能
- 4. Swift擴展類功能只能在1個文件中工作
- 5. 擴展功能在PowerShell中
- 6. 擴展現有的Firefox擴展/在自己的擴展中使用現有Firefox擴展的功能
- 7. 擴展功能
- 8. 擴展功能
- 9. 擴展功能
- 10. jQuery的展現在功能
- 11. 用球拍實現擴展功能
- 12. jQuery擴展功能
- 13. Whatsapp擴展功能
- 14. 擴展link_to功能?
- 15. 擴展EventKit功能
- 16. EF擴展功能
- 17. 擴展Prestashop功能
- 18. Datapower擴展功能和擴展元素
- 19. 如何端口Chrome擴展功能的Firefox擴展功能
- 20. 在swift中擴展SKSpriteNode
- 21. 在Swift中擴展UIGestureRecognizer
- 22. 如何在Android上擴展ORMLite的BaseDaoImpl類以擴展功能
- 23. 在winforms中擴展TreeNode功能
- 24. 在庫中組織擴展功能
- 25. 在C#.NET中擴展Active Directory功能?
- 26. 使用魔法E在擴展功能
- 27. 擴展圖表功能在SSRS
- 28. 在打字稿擴展功能
- 29. Swift:在UIAlertController中添加UITextView
- 30. 自定義擴展,功能實現在C#(LINQ-2-實體)
1)您可以在擴展的方法中傳遞ViewController對象(vcObj)。 2)您可以在ViewController層次結構中最頂層的ViewController上展示UIAlertController。 – ERbittuu
檢查此https://stackoverflow.com/questions/32010153/make-clickable-uilabel-using-swift – Jack