90947


`UIKit`で使える[ActiveLabel](https://github.com/optonaut/ActiveLabel.swift)を`UIViewRepresentable`を使ってSwiftUIで使いたいのですが、各要素(ハッシュタグ,
URL, メンション)をタップしても設定したアクションが実行されません。

## 考えられる要素

  * サイズがおかしい
  * タップ領域がUIKitとSwiftUIで異なる？

[code]

    import SwiftUI
    import ActiveLabel
    
    struct ActiveText: UIViewRepresentable {
      let text: String
      
      @State var mentionAction: ((String) -> ())?
      @State var hashtagAction: ((String) -> ())?
      @State var urlAction: ((URL) -> ())?
    
      func onTapMention(_ action: @escaping (String) -> ()) -> ActiveText {
        mentionAction = action
        return self
      }
    
      func onTapHashtag(_ action: @escaping (String) -> ()) -> ActiveText {
        hashtagAction = action
        return self
      }
    
      func onTapURL(_ action: @escaping (URL) -> ()) -> ActiveText {
        urlAction = action
        return self
      }
    
      func makeUIView(context: Context) -> ActiveLabel {
        let activeLabel = ActiveLabel()
        activeLabel.text = text
        return activeLabel
      }
    
      func updateUIView(_ uiView: ActiveLabel, context: Context) {
      }
    }
    
[/code]

[code]

    import SwiftUI
    
    struct ContentView: View {
      var text = "https://apple.com #apple @apple"
    
      var body: some View {
        ActiveText(text: text)
          .onTapMention { mention in
            print("tapped mention \(mention)")
          }
          .onTapURL { url in
            print("tapped url \(url.absoluteString)")
          }
          .onTapHashtag { hashtag in
            print("tapped hashtag \(hashtag)")
          }
      }
    }
    
[/code]


CC BY-SA 4.0
2022-05-17T16:03:43.860
88885
2022-09-05T15:48:03.267
40856
question
swift swiftui uikit
ActiveLabel(UIKit)をSwiftUIで使いたい


SwiftUIで使えるものを`AttributedText`としてリリースしました。

<https://github.com/zunda-pixel/AttributedText>

以下の投稿を参考にしました。  
<https://stackoverflow.com/a/70726761/15098239>


CC BY-SA 4.0
2022-09-05T15:48:03.267
90947
2022-09-05T15:48:03.267
40856
88885
answer