From 41081b5084ef7edb8e1526c303d8c954212d1152 Mon Sep 17 00:00:00 2001 From: Artur Gurgul Date: Sun, 3 Aug 2025 10:01:13 +0200 Subject: [PATCH] Using button created from SwiftUI in ReactNative --- App.tsx | 4 +++- .../Application/BaseButton/BaseButton.swift | 16 ++++++++++++++ .../BaseButton/BaseButtonManager.m | 12 +++++++++++ .../BaseButton/BaseButtonManager.swift | 21 +++++++++++++++++++ .../CustomButton.swift | 0 .../CustomButtonManager.m | 0 .../CustomButtonManager.swift | 0 7 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 ios/Native/Application/BaseButton/BaseButton.swift create mode 100644 ios/Native/Application/BaseButton/BaseButtonManager.m create mode 100644 ios/Native/Application/BaseButton/BaseButtonManager.swift rename ios/Native/Application/{ViewManager => CustomButton}/CustomButton.swift (100%) rename ios/Native/Application/{ViewManager => CustomButton}/CustomButtonManager.m (100%) rename ios/Native/Application/{ViewManager => CustomButton}/CustomButtonManager.swift (100%) diff --git a/App.tsx b/App.tsx index 7f30264..f53eb51 100644 --- a/App.tsx +++ b/App.tsx @@ -11,6 +11,7 @@ type CustomButtonProps = { style?: StyleProp } const CustomButton = requireNativeComponent('CustomButton') +const BaseButton = requireNativeComponent('BaseButton') export default function App() { const isDarkMode = useColorScheme() === 'dark' @@ -33,7 +34,8 @@ export default function App() { {message ?? 'Waiting for message...'} - + + ); diff --git a/ios/Native/Application/BaseButton/BaseButton.swift b/ios/Native/Application/BaseButton/BaseButton.swift new file mode 100644 index 0000000..09fd0d4 --- /dev/null +++ b/ios/Native/Application/BaseButton/BaseButton.swift @@ -0,0 +1,16 @@ +// +// BaseButton.swift +// RNPlayground +// +// Created by Artur Gurgul on 02/08/2025. +// + +import SwiftUI + +struct BaseButton: View { + var body: some View { + Button("SwiftUI Button") { + + } + } +} diff --git a/ios/Native/Application/BaseButton/BaseButtonManager.m b/ios/Native/Application/BaseButton/BaseButtonManager.m new file mode 100644 index 0000000..bbcfabc --- /dev/null +++ b/ios/Native/Application/BaseButton/BaseButtonManager.m @@ -0,0 +1,12 @@ +// +// BaseButtonManager.m +// RNPlayground +// +// Created by Artur Gurgul on 02/08/2025. +// + +#import + +@interface RCT_EXTERN_MODULE(BaseButtonManager, RCTViewManager) + +@end diff --git a/ios/Native/Application/BaseButton/BaseButtonManager.swift b/ios/Native/Application/BaseButton/BaseButtonManager.swift new file mode 100644 index 0000000..6138a84 --- /dev/null +++ b/ios/Native/Application/BaseButton/BaseButtonManager.swift @@ -0,0 +1,21 @@ +// +// BaseButtonManager.swift +// RNPlayground +// +// Created by Artur Gurgul on 02/08/2025. +// + +import Foundation +import React +import SwiftUI + +@objc(BaseButtonManager) +class BaseButtonManager: RCTViewManager { + override func view() -> UIView! { + return UIHostingController(rootView: BaseButton()).view + } + + override static func requiresMainQueueSetup() -> Bool { + return true + } +} diff --git a/ios/Native/Application/ViewManager/CustomButton.swift b/ios/Native/Application/CustomButton/CustomButton.swift similarity index 100% rename from ios/Native/Application/ViewManager/CustomButton.swift rename to ios/Native/Application/CustomButton/CustomButton.swift diff --git a/ios/Native/Application/ViewManager/CustomButtonManager.m b/ios/Native/Application/CustomButton/CustomButtonManager.m similarity index 100% rename from ios/Native/Application/ViewManager/CustomButtonManager.m rename to ios/Native/Application/CustomButton/CustomButtonManager.m diff --git a/ios/Native/Application/ViewManager/CustomButtonManager.swift b/ios/Native/Application/CustomButton/CustomButtonManager.swift similarity index 100% rename from ios/Native/Application/ViewManager/CustomButtonManager.swift rename to ios/Native/Application/CustomButton/CustomButtonManager.swift