ラベル内のリンクを検出するラベル拡張を書きました。 リンク用のNSLinkAttributeNameが付いたテキストの属性です。私は func handleTapOnLabel(_ tapGesture:UITapGestureRecognizer){}
を使用して、どこにタップがあり、どのリンクを開くかを検出しています。問題は、私がUILabelの拡張機能を使用していて、UIAlertControllerを提示してその人に尋ねるということです - 「Safariでこのリンクを開こうとしています。続行しますか?」 viewcontrollerにアクセスして、present(UIAlertController...
ファンクションを使用してアラートを表示します。どのようにこれが延長で起こることができるか提案?どのように拡張子からラベルのviewcontrollerに直接アクセスするのですか?Swift - 現在の拡張関数UIAlertController
0
A
答えて
1
方法1)使用するCA一番上のコントローラを取得するためのパラメータ
extension UILabel { //your extension
func openLink(vc: UIViewController) { //your extension custom method function
// code
// present alert on this vc
}
}
//などのViewControllerの階層
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 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
私はimplemet(vc:UIViewController)を1000の関数で使用する必要があるため、メソッド2を使用したくありません。私が試した1番目のメソッドについて、しかし、topController.presentedViewControllerは常にnilですか?他の方法や提案はありますか? –
+0
ここでtopControllerのチェックコード – ERbittuu
関連する問題
- 1. 現在アクティブなUIViewControllerのUIAlertController
- 2. ネストされた関数から現在のURLを返す - Chrome拡張機能
- 3. クアルコム拡張スナップドラゴンデバイスの拡張現実
- 4. PHPの拡張addslashes関数
- 5. プロトコル拡張のSwiftプロパティオブザーバ?
- 6. Swiftのプロトコル拡張3
- 7. Swift UIColor拡張のベストプラクティス
- 8. Swiftクラス拡張のドキュメントコメント
- 9. Swift 2.0のプロトコル拡張メソッドディスパッチ
- 10. プロパティのSwift拡張イベントリスナー
- 11. Swift 3の配列拡張
- 12. UILabel(Swift)(SwiftyStoreKit)に現在の関数の結果
- 13. 拡張現実感アプリのSwiftプロジェクトでVuforia iOS SDKを使用
- 14. プロトコルと拡張機能swift
- 15. 拡張エラーSwift 3 JSON
- 16. 拡張現実フィードバック
- 17. Swift - モバイルデータを入手現在の数字
- 18. 拡張の動作を維持するSwiftオーバーライドプロトコル拡張
- 19. バックグラウンドスクリプトでクロム拡張子の現在のタブURLを取得
- 20. Chrome拡張機能で現在のテーマの背景を取得
- 21. DIAMOND現在のアプリケーションの機能を拡張したいとき
- 22. ブラウザ拡張 - 現在のページのURLを取得する方法
- 23. Swiftでデリゲート関数を実装するための拡張機能の使用
- 24. watchOSで現在の拡張デリゲートを取得するには?
- 25. safeAreaInsetsを現在の制約拡張に統合する方法
- 26. 現在のファイル名をC++で拡張子で印刷する
- 27. クロム拡張ポップアップウィンドウ内に現在のタブリンクを保存します
- 28. アンドロイド拡張現実のヘルプ
- 29. iPhoneの拡張現実
- 30. アンドロイドの拡張現実
1)拡張のメソッドでViewControllerオブジェクト(vcObj)を渡すことができます。 2)UIAlertControllerをViewControllerの階層の一番上のViewControllerに表示できます。 – ERbittuu
これを確認してくださいhttps://stackoverflow.com/questions/32010153/make-clickable-uilabel-using-swift – Jack