Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat [#42] CreateChallenge view 생성 및 버튼 활성화 로직 구현 #45

Merged
merged 6 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
objects = {

/* Begin PBXBuildFile section */
0B000CE92B4D9D6E00AEC582 /* SelectPeriodController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B000CE82B4D9D6E00AEC582 /* SelectPeriodController.swift */; };
0B000CEB2B4D9D9100AEC582 /* SelectTotalTimeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B000CEA2B4D9D9100AEC582 /* SelectTotalTimeController.swift */; };
0B000CED2B4D9DA800AEC582 /* ApprovePermisionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B000CEC2B4D9DA800AEC582 /* ApprovePermisionController.swift */; };
0B000CF12B4DA30F00AEC582 /* AppSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B000CF02B4DA30F00AEC582 /* AppSelectViewController.swift */; };
0B0035402B43D64D00DA140C /* HMHNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B00353F2B43D64D00DA140C /* HMHNavigationBar.swift */; };
0B2C2D3B2B443BE90023CCFA /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B2C2D3A2B443BE90023CCFA /* Image.swift */; };
0B2C2D412B4572240023CCFA /* HMHSelectButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B2C2D402B4572240023CCFA /* HMHSelectButton.swift */; };
Expand Down Expand Up @@ -153,6 +157,10 @@
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
0B000CE82B4D9D6E00AEC582 /* SelectPeriodController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectPeriodController.swift; sourceTree = "<group>"; };
0B000CEA2B4D9D9100AEC582 /* SelectTotalTimeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTotalTimeController.swift; sourceTree = "<group>"; };
0B000CEC2B4D9DA800AEC582 /* ApprovePermisionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApprovePermisionController.swift; sourceTree = "<group>"; };
0B000CF02B4DA30F00AEC582 /* AppSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSelectViewController.swift; sourceTree = "<group>"; };
0B00353F2B43D64D00DA140C /* HMHNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHNavigationBar.swift; sourceTree = "<group>"; };
0B2C2D3A2B443BE90023CCFA /* Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = "<group>"; };
0B2C2D402B4572240023CCFA /* HMHSelectButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHSelectButton.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -289,6 +297,17 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
0B000CE72B4D9D4E00AEC582 /* ViewControllers */ = {
isa = PBXGroup;
children = (
0B000CE82B4D9D6E00AEC582 /* SelectPeriodController.swift */,
0B000CEA2B4D9D9100AEC582 /* SelectTotalTimeController.swift */,
0B000CEC2B4D9DA800AEC582 /* ApprovePermisionController.swift */,
0B000CF02B4DA30F00AEC582 /* AppSelectViewController.swift */,
);
path = ViewControllers;
sourceTree = "<group>";
};
0B2C2D3C2B4559AE0023CCFA /* Onboarding */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -796,6 +815,7 @@
3666C8842B47110800564874 /* CreateChallenge */ = {
isa = PBXGroup;
children = (
0B000CE72B4D9D4E00AEC582 /* ViewControllers */,
3666C8852B47110800564874 /* Views */,
);
path = CreateChallenge;
Expand Down Expand Up @@ -1003,9 +1023,12 @@
0B7817522B4BE0280078E925 /* ProgressBarManager.swift in Sources */,
0B8A89C42B369FA000688BA6 /* F.swift in Sources */,
3666C8892B47110800564874 /* TotalTimePickerView.swift in Sources */,
0B000CE92B4D9D6E00AEC582 /* SelectPeriodController.swift in Sources */,
174AF49A2B447CFB00450D07 /* ChanllengeViews.swift in Sources */,
0B000CEB2B4D9D9100AEC582 /* SelectTotalTimeController.swift in Sources */,
17314F872B49853C0089A551 /* HMHQuitAlert.swift in Sources */,
0BA193B62B4D08B7007E3F9C /* ProblemSurveyViewController.swift in Sources */,
0B000CED2B4D9DA800AEC582 /* ApprovePermisionController.swift in Sources */,
0B8A89B72B369F1100688BA6 /* C.swift in Sources */,
0B2C2D3B2B443BE90023CCFA /* Image.swift in Sources */,
17314F852B497FDE0089A551 /* HMHLogoutAlert.swift in Sources */,
Expand Down Expand Up @@ -1041,6 +1064,7 @@
0BC0EBD22B493B6B003EF5D4 /* OnboardingProgressView.swift in Sources */,
364C4E732B4BF27C0015729C /* AppAddCollectionReusableView.swift in Sources */,
17314F7F2B485E150089A551 /* CustomAlertButton.swift in Sources */,
0B000CF12B4DA30F00AEC582 /* AppSelectViewController.swift in Sources */,
36A3D9BA2B3EBC65007EA272 /* UIButton+.swift in Sources */,
3666C88F2B471C5800564874 /* TabBarController.swift in Sources */,
36E05FE62B48825A005B633E /* AppCollectionReusableView.swift in Sources */,
Expand Down
20 changes: 20 additions & 0 deletions HMH_iOS/HMH_iOS/Global/Extension/UILabel+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,24 @@ extension UILabel {
self.numberOfLines = 2
}
}

func setTextWithLineHeightLeft(text: String?, lineHeight: CGFloat) {
if let text = text {
let style = NSMutableParagraphStyle()
style.maximumLineHeight = lineHeight
style.minimumLineHeight = lineHeight

let attributes: [NSAttributedString.Key: Any] = [
.paragraphStyle: style,
.baselineOffset: (lineHeight - font.lineHeight) * 0.26
]

let attrString = NSAttributedString(string: text,
attributes: attributes)
self.attributedText = attrString
self.textAlignment = .left
self.numberOfLines = 2
}
}

}
15 changes: 15 additions & 0 deletions HMH_iOS/HMH_iOS/Global/Literals/String/String.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,18 @@ enum StringLiteral {
enum OnboardigMain {
static let timeSurvey = "하루 평균 휴대폰을\n얼마나 사용하나요?"
static let problemSurvey = "휴대폰을 사용할 때\n어떤 문제를 겪고 있나요?"
static let selectPeriod = "챌린지 기간을 선택해 주세요"
static let selectTotalTime = "총 목표 이용 시간을\n설정해 주세요"
static let approvePermision = "스크린타임 권한 허용이 필요해요"
static let appSelect = "중독에서 탈출하고 싶은\n앱을 선택해 주세요"
}

enum OnboardigSub {
static let problemSurvey = "해당 문항은 최대 2개까지 선택할 수 있어요"
static let selectPeriod = "첫 챌린지로 가볍게 도전하기 좋은 7일을 추천해요"
static let selectTotalTime = "목표 이용 시간은 최대 6시간까지 설정할 수 있어요"
static let approvePermision = "언제든지 설정에서 스크린타임 권한을\n변경할 수 있어요"
static let appSelect = "목표 이용 시간이 지나면 앱이 잠겨요\n선택하고 싶은 앱은 언제든지 추가할 수 있어요"
}

enum TimeSurveySelect {
Expand All @@ -94,4 +102,11 @@ enum StringLiteral {
static let thirdSelect = "특정 앱에 수시로 접속하게 돼요"
static let fourthSelect = "중독을 탈출하려고 노력해도 잘 안 돼요"
}

enum PeriodSelect {
static let firstSelect = "7일"
static let secondSelect = "14일"
static let thirdSelect = "20일"
static let fourthSelect = "30일"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ import UIKit
import SnapKit
import Then

protocol HMHSelectButtonDelegate: AnyObject {
func updateAvailability(isEnabled: Bool)
}

final class HMHSelectButton: UIButton {
weak var delegate: HMHSelectButtonDelegate?

@frozen
enum HMHSelectButtonType {
case solitary
Expand Down Expand Up @@ -105,14 +111,15 @@ final class HMHSelectButton: UIButton {
}

setChecked(true)
setAvailability()

case .multiple:
let selectedCount = (superview?.subviews.compactMap { ($0 as? HMHSelectButton)?.isChecked } ?? []).filter { $0 }.count

if selectedCount < 2 || isChecked {
setChecked(!isChecked)
setAvailability()
}

case .disabled:
return
}
Expand All @@ -121,4 +128,16 @@ final class HMHSelectButton: UIButton {
func setButtonText(buttonTitle: String) {
buttonContentLabel.text = buttonTitle
}

func setAvailability() {
if (superview?.subviews.compactMap { ($0 as? HMHSelectButton)?.isChecked } ?? []).filter { $0 }.count == 0 {
updateAvailability(status: false)
} else {
updateAvailability(status: true)
}
}

func updateAvailability(status: Bool) {
self.delegate?.updateAvailability(isEnabled: status)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// AppSelectViewController.swift
// HMH_iOS
//
// Created by Seonwoo Kim on 1/10/24.
//

import UIKit

import SnapKit
import Then

final class AppSelectViewController: OnboardingBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
configureSurveyView()
setDelegate()
setTimeSurvey()
}

private func setDelegate() {
self.delegate = self
}

private func setTimeSurvey() {
view.backgroundColor = .background
step = 5
}

private func configureSurveyView() {
nextButtonText = StringLiteral.OnboardingButton.permission
nextButton.setButtonText(buttonTitle: nextButtonText)
mainTitleText = StringLiteral.OnboardigMain.appSelect
subTitleText = StringLiteral.OnboardigSub.appSelect
}
}

extension AppSelectViewController: NextViewPushDelegate {
func didTapButton() {
let nextViewController = AppSelectViewController()
self.navigationController?.pushViewController(nextViewController, animated: false)
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// ApprovePermisionController.swift
// HMH_iOS
//
// Created by Seonwoo Kim on 1/10/24.
//

import UIKit

import SnapKit
import Then

final class ApprovePermisionController: OnboardingBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
configureSurveyView()
setDelegate()
setTimeSurvey()
}


private func setDelegate() {
self.delegate = self
}

private func setTimeSurvey() {
view.backgroundColor = .background
step = 5
}

private func configureSurveyView() {
nextButtonText = StringLiteral.OnboardingButton.permission
nextButton.setButtonText(buttonTitle: nextButtonText)
mainTitleText = StringLiteral.OnboardigMain.approvePermision
subTitleText = StringLiteral.OnboardigSub.approvePermision
}
}

extension ApprovePermisionController: NextViewPushDelegate {
func didTapButton() {
let nextViewController = AppSelectViewController()
self.navigationController?.pushViewController(nextViewController, animated: false)
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
//
// SelectPeriodController.swift
// HMH_iOS
//
// Created by Seonwoo Kim on 1/10/24.
//

import UIKit

import SnapKit
import Then

final class SelectPeriodController: OnboardingBaseViewController {
private let surveyView = SurveyView(firstButtonType: .solitary, secondButtonType: .solitary, thirdButtonType: .disabled, fourthButtonType: .disabled)

override func viewDidLoad() {
super.viewDidLoad()
setUI()
configureSurveyView()
setDelegate()
setTimeSurvey()
}

override func viewDidAppear(_ animated: Bool) {
setUI()
}

private func setUI(){
setHierarchy()
setConstraints()
}

private func setHierarchy() {
view.addSubview(surveyView)
}

private func setConstraints() {
surveyView.snp.makeConstraints {
$0.top.equalTo(mainTitleLabel.snp.bottom).offset(94.adjustedHeight)
$0.leading.trailing.equalTo(progressBar)
}
}

private func setDelegate() {
self.delegate = self
}

private func setTimeSurvey() {
view.backgroundColor = .background
step = 3
}

private func configureSurveyView() {
nextButtonText = StringLiteral.OnboardingButton.next
nextButton.setButtonText(buttonTitle: nextButtonText)
mainTitleText = StringLiteral.OnboardigMain.selectPeriod
subTitleText = StringLiteral.OnboardigSub.selectPeriod
surveyView.firstButton.setButtonText(buttonTitle: StringLiteral.PeriodSelect.firstSelect)
surveyView.secondButton.setButtonText(buttonTitle: StringLiteral.PeriodSelect.secondSelect)
surveyView.thirdButton.setButtonText(buttonTitle: StringLiteral.PeriodSelect.thirdSelect)
surveyView.fourthButton.setButtonText(buttonTitle: StringLiteral.PeriodSelect.fourthSelect)

surveyView.firstButton.delegate = self
surveyView.secondButton.delegate = self
surveyView.thirdButton.delegate = self
surveyView.fourthButton.delegate = self
}
}

extension SelectPeriodController: NextViewPushDelegate {
func didTapButton() {
let nextViewController = SelectTotalTimeController()
self.navigationController?.pushViewController(nextViewController, animated: false)
}
}

extension SelectPeriodController: HMHSelectButtonDelegate {
func updateAvailability(isEnabled: Bool) {
nextButton.updateStatus(isEnabled: isEnabled)
}
}
Loading