diff --git a/Sources/SDSKit/Component/NavigationBar/SDSNavigationStyle.swift b/Sources/SDSKit/Component/NavigationBar/SDSNavigationStyle.swift new file mode 100644 index 0000000..19a196a --- /dev/null +++ b/Sources/SDSKit/Component/NavigationBar/SDSNavigationStyle.swift @@ -0,0 +1,11 @@ +#if canImport(UIKit) +import UIKit +#endif + +public enum SDSNavigationStyle { + case leftTitleRightDismissButton(title: String, dismissImage: UIImage, action: () -> Void) + case leftPopButtonMiddleTitle(title: String, action: () -> Void) + case titleRightDismissButton(title: String, dismissImage: UIImage, action: () -> Void) + case leftPopButtonMiddleTitleRightDismissButton(title: String, dismissImage: UIImage, popAction: () -> Void, dismissAction: () -> Void) + case leftPopButtonMiddleTitleRightCustomButton(title: String, customButtonTitle: String, popAction: () -> Void, dismissAction: () -> Void) +} diff --git a/Sources/SDSKit/Component/NavigationBar/SDSNavigationUIView.swift b/Sources/SDSKit/Component/NavigationBar/SDSNavigationUIView.swift new file mode 100644 index 0000000..86828e8 --- /dev/null +++ b/Sources/SDSKit/Component/NavigationBar/SDSNavigationUIView.swift @@ -0,0 +1,205 @@ +#if canImport(UIKit) +import UIKit +import SnapKit +#endif + + +public final class SDSNavigationUIView: UIView { + let style: SDSNavigationStyle + public init(style: SDSNavigationStyle) { + self.style = style + super.init(frame: .zero) + setup() + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setup() { + switch style { + case .leftTitleRightDismissButton(let title, let dismissImage, _): + let titleLabel: UILabel = { + let label = UILabel() + label.textColor = .gray600 + label.text = title + label.font = SDSFont.title1.font + return label + }() + let dismissButton: UIButton = { + let button = UIButton() + button.setImage(dismissImage, for: .normal) + button.addTarget(self, action: #selector(dismissButtonTapped), for: .touchUpInside) + return button + }() + [titleLabel, dismissButton].forEach { addSubview($0) } + self.snp.makeConstraints { + $0.height.equalTo(52) + } + titleLabel.snp.makeConstraints { + $0.leading.equalToSuperview().inset(20) + $0.centerY.equalToSuperview() + } + dismissButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(10) + $0.height.width.equalTo(36) + $0.centerY.equalToSuperview() + } + case .leftPopButtonMiddleTitle(let title, _): + let popButton: UIButton = { + let button = UIButton() + button.setImage(SDSIcon.icNavigationBarLeft, for: .normal) + button.addTarget(self, action: #selector(popButtonTapped), for: .touchUpInside) + return button + }() + let middleTitleLabel: UILabel = { + let label = UILabel() + label.text = title + label.font = SDSFont.subTitle.font + label.textColor = .gray600 + return label + }() + [popButton, middleTitleLabel].forEach { addSubview($0) } + self.snp.makeConstraints { + $0.height.equalTo(52) + } + popButton.snp.makeConstraints { + $0.leading.equalToSuperview().inset(10) + $0.height.width.equalTo(24) + $0.centerY.equalToSuperview() + } + middleTitleLabel.snp.makeConstraints { + $0.centerX.centerY.equalToSuperview() + } + case .titleRightDismissButton(let title, let dismissImage, _): + let middleTitleLabel: UILabel = { + let label = UILabel() + label.text = title + label.font = SDSFont.subTitle.font + label.textColor = .gray600 + return label + }() + let dismissButton: UIButton = { + let button = UIButton() + button.setImage(dismissImage, for: .normal) + button.addTarget(self, action: #selector(dismissButtonTapped), for: .touchUpInside) + return button + }() + [middleTitleLabel, dismissButton].forEach { addSubview($0) } + self.snp.makeConstraints { + $0.height.equalTo(52) + } + dismissButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(10) + $0.height.width.equalTo(36) + $0.centerY.equalToSuperview() + } + middleTitleLabel.snp.makeConstraints { + $0.centerX.centerY.equalToSuperview() + } + case .leftPopButtonMiddleTitleRightDismissButton(let title, let dismissImage, _, _): + let popButton: UIButton = { + let button = UIButton() + button.setImage(SDSIcon.icNavigationBarLeft, for: .normal) + button.addTarget(self, action: #selector(popButtonTapped), for: .touchUpInside) + return button + }() + let middleTitleLabel: UILabel = { + let label = UILabel() + label.text = title + label.font = SDSFont.subTitle.font + label.textColor = .gray600 + return label + }() + let dismissButton: UIButton = { + let button = UIButton() + button.setImage(dismissImage, for: .normal) + button.addTarget(self, action: #selector(dismissButtonTapped), for: .touchUpInside) + return button + }() + [popButton, middleTitleLabel, dismissButton].forEach { addSubview($0) } + self.snp.makeConstraints { + $0.height.equalTo(52) + } + popButton.snp.makeConstraints { + $0.leading.equalToSuperview().inset(10) + $0.height.width.equalTo(24) + $0.centerY.equalToSuperview() + } + middleTitleLabel.snp.makeConstraints { + $0.centerX.centerY.equalToSuperview() + } + dismissButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(10) + $0.height.width.equalTo(36) + $0.centerY.equalToSuperview() + } + case .leftPopButtonMiddleTitleRightCustomButton(let title, let customButtonTitle, _, _): + let popButton: UIButton = { + let button = UIButton() + button.setImage(SDSIcon.icNavigationBarLeft, for: .normal) + button.addTarget(self, action: #selector(popButtonTapped), for: .touchUpInside) + return button + }() + let middleTitleLabel: UILabel = { + let label = UILabel() + label.text = title + label.font = SDSFont.subTitle.font + label.textColor = .gray600 + return label + }() + let dismissButton: UIButton = { + let button = UIButton() + button.setTitle(customButtonTitle, for: .normal) + button.setTitleColor(.lightBlue600, for: .normal) + button.titleLabel?.font = SDSFont.subTitle.font + button.addTarget(self, action: #selector(dismissButtonTapped), for: .touchUpInside) + return button + }() + [popButton, middleTitleLabel, dismissButton].forEach { addSubview($0) } + self.snp.makeConstraints { + $0.height.equalTo(52) + } + popButton.snp.makeConstraints { + $0.leading.equalToSuperview().inset(10) + $0.height.width.equalTo(24) + $0.centerY.equalToSuperview() + } + middleTitleLabel.snp.makeConstraints { + $0.centerX.centerY.equalToSuperview() + } + dismissButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(10) + $0.height.width.equalTo(36) + $0.centerY.equalToSuperview() + } + } + } + @objc private func dismissButtonTapped() { + switch style { + case .leftTitleRightDismissButton(_, _, let action): + action() + case .leftPopButtonMiddleTitle(_, _): + return + case .titleRightDismissButton(_, _, let action): + action() + case .leftPopButtonMiddleTitleRightDismissButton(_, _, _, let dismissAction): + dismissAction() + case .leftPopButtonMiddleTitleRightCustomButton(_, _, _, let dismissAction): + dismissAction() + } + } + @objc private func popButtonTapped() { + switch style { + case .leftTitleRightDismissButton(_, _, _): + return + case .leftPopButtonMiddleTitle(_, let action): + action() + case .titleRightDismissButton(_, _, _): + return + case .leftPopButtonMiddleTitleRightDismissButton(_, _, let popAction, _): + popAction() + case .leftPopButtonMiddleTitleRightCustomButton(_, _, let popAction, _): + popAction() + } + } +} + diff --git a/Sources/SDSKit/Component/NavigationBar/SDSNavigationView.swift b/Sources/SDSKit/Component/NavigationBar/SDSNavigationView.swift index 8c0dcb8..a80b5f6 100644 --- a/Sources/SDSKit/Component/NavigationBar/SDSNavigationView.swift +++ b/Sources/SDSKit/Component/NavigationBar/SDSNavigationView.swift @@ -2,14 +2,6 @@ import SwiftUI #endif -public enum SDSNavigationStyle { - case leftTitleRightDismissButton(title: String, dismissImage: Image, action: () -> Void) - case leftPopButtonMiddleTitle(title: String, action: () -> Void) - case titleRightDismissButton(title: String, dismissImage: Image, action: () -> Void) - case leftPopButtonMiddleTitleRightDismissButton(title: String, dismissImage: Image, popAction: () -> Void, dismissAction: () -> Void) - case leftPopButtonMiddleTitleRightCustomButton(title: String, customButtonTitle: String, popAction: () -> Void, dismissAction: () -> Void) -} - public struct SDSNavigationView: View { let style: SDSNavigationStyle public init(style: SDSNavigationStyle) { @@ -27,7 +19,7 @@ public struct SDSNavigationView: View { Button { action() } label: { - dismissImage + Image(uiImage: dismissImage) .resizable() .frame(width: 36, height: 36) } @@ -71,7 +63,7 @@ public struct SDSNavigationView: View { Button { action() } label: { - dismissImage + Image(uiImage: dismissImage) .resizable() .frame(width: 36, height: 36) } @@ -98,7 +90,7 @@ public struct SDSNavigationView: View { Button { dismissAction() } label: { - dismissImage + Image(uiImage: dismissImage) .resizable() .frame(width: 36, height: 36) }