-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #25 from boostcampwm-2022/feature/QuestView
QuestView 작성, 버튼 클릭시, AddQuestsView present
- Loading branch information
Showing
8 changed files
with
304 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
69 changes: 69 additions & 0 deletions
69
DailyQuest/DailyQuest/Presentation/Home/View/QuestView.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
// | ||
// QuestView.swift | ||
// DailyQuest | ||
// | ||
// Created by jinwoong Kim on 2022/11/16. | ||
// | ||
|
||
import UIKit | ||
|
||
import RxSwift | ||
import RxCocoa | ||
|
||
final class QuestView: UITableView { | ||
private var viewModel: QuestViewModel! | ||
private var disposableBag = DisposeBag() | ||
|
||
override init(frame: CGRect, style: UITableView.Style) { | ||
super.init(frame: frame, style: style) | ||
|
||
rowHeight = 75 | ||
|
||
register(QuestCell.self, forCellReuseIdentifier: QuestCell.reuseIdentifier) | ||
} | ||
|
||
required init?(coder: NSCoder) { | ||
fatalError("init(coder:) has not been implemented") | ||
} | ||
|
||
func setup(with viewModel: QuestViewModel) { | ||
self.viewModel = viewModel | ||
|
||
bind() | ||
} | ||
|
||
private func bind() { | ||
viewModel | ||
.data | ||
.bind(to: rx.items(cellIdentifier: QuestCell.reuseIdentifier, cellType: QuestCell.self)) { row, item, cell in | ||
cell.setup(with: item) | ||
cell.backgroundColor = .white | ||
} | ||
.disposed(by: disposableBag) | ||
} | ||
} | ||
|
||
/** | ||
`QuestView`의 델리게이트 역할을 수행할 클래스입니다. | ||
생성자를 통해 header 정보를 받는 이유는, `func tableView(_:viewForHeaderInSection)`메서드에서 헤더를 지정해주기 때문입니다. | ||
*/ | ||
final class QuestViewDelegate: NSObject, UITableViewDelegate { | ||
private let header: QuestViewHeader | ||
|
||
init(header: QuestViewHeader) { | ||
self.header = header | ||
} | ||
|
||
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { | ||
return 75 | ||
} | ||
|
||
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | ||
return header | ||
} | ||
|
||
deinit { | ||
print("deinit") | ||
} | ||
} | ||
|
65 changes: 65 additions & 0 deletions
65
DailyQuest/DailyQuest/Presentation/Home/View/QuestViewHeader.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
// | ||
// QuestViewHeader.swift | ||
// DailyQuest | ||
// | ||
// Created by jinwoong Kim on 2022/11/16. | ||
// | ||
|
||
import UIKit | ||
|
||
import RxSwift | ||
import RxCocoa | ||
import SnapKit | ||
|
||
final class QuestViewHeader: UIStackView { | ||
private var disposableBag = DisposeBag() | ||
var buttonDidClick = PublishSubject<Void>() | ||
|
||
// MARK: - Components | ||
private lazy var titleLabel: UILabel = { | ||
let titleLabel = UILabel() | ||
titleLabel.text = "Today Quest" | ||
titleLabel.textColor = .maxViolet | ||
titleLabel.font = UIFont.boldSystemFont(ofSize: 32) | ||
|
||
return titleLabel | ||
}() | ||
|
||
private lazy var plusButton: UIButton = { | ||
var config = UIButton.Configuration.maxStyle() | ||
let plusButton = UIButton(configuration: config) | ||
|
||
return plusButton | ||
}() | ||
|
||
// MARK: - Methods | ||
convenience init() { | ||
self.init(frame: .zero) | ||
|
||
axis = .horizontal | ||
alignment = .center | ||
distribution = .equalSpacing | ||
isLayoutMarginsRelativeArrangement = true | ||
layoutMargins = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10) | ||
|
||
configureUI() | ||
bind() | ||
} | ||
|
||
private func configureUI() { | ||
addArrangedSubview(titleLabel) | ||
addArrangedSubview(plusButton) | ||
} | ||
|
||
/** | ||
버튼이 클릭되면 `buttonDidClick` subject가 이벤트를 방출합니다. | ||
눌려졌다는 정보만 있으면 되므로, output type은 Void입니다. | ||
*/ | ||
private func bind() { | ||
plusButton.rx.tap | ||
.subscribe(onNext: { [weak self] _ in | ||
self?.buttonDidClick.onNext(()) | ||
}) | ||
.disposed(by: disposableBag) | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
DailyQuest/DailyQuest/Presentation/Home/ViewController/AddQuestsViewController.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// | ||
// AddQuestsViewController.swift | ||
// DailyQuest | ||
// | ||
// Created by jinwoong Kim on 2022/11/16. | ||
// | ||
|
||
import UIKit | ||
|
||
import SnapKit | ||
|
||
final class AddQuestsViewController: UIViewController { | ||
|
||
private lazy var indicateMessage: UILabel = { | ||
let indicateMessage = UILabel() | ||
indicateMessage.text = "여기서 새로운 퀘스트를 추가합니다." | ||
|
||
return indicateMessage | ||
}() | ||
|
||
override func viewDidLoad() { | ||
super.viewDidLoad() | ||
|
||
view.backgroundColor = .systemGray | ||
|
||
configureUI() | ||
} | ||
|
||
private func configureUI() { | ||
view.addSubview(indicateMessage) | ||
|
||
indicateMessage.snp.makeConstraints { make in | ||
make.center.equalToSuperview() | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.