{"id":4796,"date":"2023-04-18T10:35:12","date_gmt":"2023-04-18T01:35:12","guid":{"rendered":"https:\/\/redwing.moo.jp\/cocoa\/?p=4796"},"modified":"2023-04-20T16:10:37","modified_gmt":"2023-04-20T07:10:37","slug":"swiftui%e3%80%81uikit-%e3%81%ae%e7%9b%b8%e4%ba%92%e5%88%a9%e7%94%a8%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6","status":"publish","type":"post","link":"https:\/\/redwing.moo.jp\/cocoa\/archives\/4796","title":{"rendered":"SwiftUI\u3001UIKit \u306e\u76f8\u4e92\u5229\u7528\u306b\u3064\u3044\u3066"},"content":{"rendered":"\n<p>\u73fe\u884c\u306e\u30a2\u30d7\u30ea\u306bSwiftUI\u3092\u7528\u3044\u308b\u5834\u5408\u3001UIKit\u3068\u306e\u76f8\u4e92\u5229\u7528\u306b\u3064\u3044\u3066\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u8abf\u3079\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u3010UIKit \u2192 SwiftUI\u3011<\/h2>\n\n\n\n<p>UIHostingController \u30af\u30e9\u30b9<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u3010SwiftUI \u2192 UIKit\u3011<\/h2>\n\n\n\n<p>UIViewRepresentable \u30d7\u30ed\u30c8\u30b3\u30eb<br>UIViewControllerRepresentable \u30d7\u30ed\u30c8\u30b3\u30eb<\/p>\n\n\n\n<p>SwiftUI\u3067UIKit\u306eUIButton\u3092\u5229\u7528\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u306f\u4ee5\u4e0b\u306e\u901a\u308a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: swift; title: ; notranslate\" title=\"\">\nimport SwiftUI\n\nstruct CounterView: View {\n    @State var text: String = &quot;Button_title&quot;\n    \n    var body: some View {\n        VStack(alignment: .leading) {\n            CustomButton(text: $text)\n        }\n    }\n}\n\nstruct CustomButton: UIViewRepresentable {\n    @Binding var text: String\n\n    func makeUIView(context: Context) -&gt; UIButton {\n        let button = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 44))\n        button.setTitle(self.text, for: .normal)\n        button.setTitleColor(.black, for: .normal)\n        button.addTarget(context.coordinator, action: #selector(Coordinator.didTapCustomButton(sender:)), for: .touchUpInside)\n        return button\n    }\n\n    \/\/ SwiftUI \u2192 UIkit\n    \/\/ \u30d3\u30e5\u30fc\u306e\u72b6\u614b\u304c\u66f4\u65b0\u3055\u308c\u308b\u305f\u3073\u547c\u3073\u51fa\u3055\u308c\u308b\n    func updateUIView(_ uiView: UIButton, context: Context) {\n        print(&quot;\\(#function)&quot;)\n    }\n\n    static func dismantleUIView(_ uiView: UIButton, coordinator: ()) {\n        print(&quot;\\(#function)&quot;)\n    }\n    \n    \/\/ UIKit \u2192 SwiftUI\n    func makeCoordinator() -&gt; Coordinator {\n        return Coordinator(button: self)\n    }\n\n    class Coordinator {\n        var button: CustomButton\n\n        init(button: CustomButton) {\n            self.button = button\n        }\n\n        @objc func didTapCustomButton(sender: UIButton) {\n            print(&quot;\\(#function)&quot;)\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u3010\u53c2\u8003\u3011<\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/qiita.com\/owen\/items\/73473cd2206afda3c5d4\" target=\"_blank\">\u4e00\u90e8\u306e\u753b\u9762\u3060\u3051SwiftUI\u3092\u4f7f\u3044\u305f\u3044\u3068\u304d<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/qiita.com\/maiyama18\/items\/e36608af7e39f81af01c\" target=\"_blank\">UIViewRepresentable \u3092\u7406\u89e3\u3057\u3066 SwiftUI \u306e\u8db3\u308a\u306a\u3044\u3068\u3053\u308d\u3092 UIKit \u3067\u88dc\u3046<\/a><\/p>\n<a href=\"https:\/\/twitter.com\/redwing1300?ref_src=twsrc%5Etfw\" class=\"twitter-follow-button\" data-size=\"large\" data-show-count=\"false\">Follow @redwing1300<\/a><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><div id=\"redwi-810638986\" class=\"redwi- redwi-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-9652476346722993\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-9652476346722993\" \ndata-ad-slot=\"\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u73fe\u884c\u306e\u30a2\u30d7\u30ea\u306bSwiftUI\u3092\u7528\u3044\u308b\u5834\u5408\u3001UIKit\u3068\u306e\u76f8\u4e92\u5229\u7528\u306b\u3064\u3044\u3066\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u8abf\u3079\u3066\u307f\u307e\u3057\u305f\u3002 \u3010UIKit \u2192 SwiftUI\u3011 UIHostingController \u30af\u30e9\u30b9 \u3010SwiftUI \u2192  &hellip; <a href=\"https:\/\/redwing.moo.jp\/cocoa\/archives\/4796\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[116],"tags":[301,389],"class_list":["post-4796","post","type-post","status-publish","format-standard","hentry","category-swift","tag-swiftui","tag-uikit"],"_links":{"self":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/comments?post=4796"}],"version-history":[{"count":6,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4796\/revisions"}],"predecessor-version":[{"id":4802,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4796\/revisions\/4802"}],"wp:attachment":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/media?parent=4796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/categories?post=4796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/tags?post=4796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}