Skip to content

Commit

Permalink
Feat [#7] MVVM 화면 전환 리팩토링
Browse files Browse the repository at this point in the history
  • Loading branch information
chaentopia committed Dec 5, 2023
1 parent b1ef837 commit c234940
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,9 @@ import UIKit
import SnapKit
import Then

protocol WeatherButtonDelegate: AnyObject {
func weatherButtonTapped(sender: WeatherListButton) -> UIViewController
}

class WeatherListButton: UIButton {

var indexNumber = 0
weak var weatherButtonDelegate: WeatherButtonDelegate?

let myPlaceLabel = UILabel()
let localLabel = UILabel()
Expand All @@ -29,24 +24,18 @@ class WeatherListButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setUI()
setAddTarget()
}

required init?(coder: NSCoder) {
super.init(coder: coder)
setUI()
setAddTarget()
}

private func setUI() {
setStyle()
setLayout()
}

private func setAddTarget() {
self.addTarget(self, action: #selector(weatherButtonTapped), for: .touchUpInside)
}

func setStyle() {
self.setBackgroundImage(UIImage(named: "imgList"), for: .normal)
self.imageView?.contentMode = .scaleAspectFill
Expand Down Expand Up @@ -126,8 +115,4 @@ class WeatherListButton: UIButton {
$0.trailing.equalTo(minTempLabel.snp.leading).offset(-6)
}
}

@objc func weatherButtonTapped() {
weatherButtonDelegate?.weatherButtonTapped(sender: self)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ final class HomeViewController: UIViewController {
private func bindViewModel() {
self.homeCollectionView.dataSource = homeViewModel
self.searchBar.delegate = homeViewModel
self.homeViewModel.weatherButtonDelegate = self
}

private func setCollectionViewConfig() {
Expand Down Expand Up @@ -150,3 +151,23 @@ extension HomeViewController {

extension HomeViewController: UICollectionViewDelegate { }

extension HomeViewController: WeatherButtonDelegate {

func weatherButtonTapped(sender: WeatherListButton) {
let detailPageViewController = DetailPageViewController()

for index in 0..<homeViewModel.resultArray.count {
let detailViewController = DetailViewController()
detailViewController.indexNumber = index
detailViewController.detailWeatherData = homeViewModel.resultArray[index]
detailPageViewController.detailViewControllers.append(detailViewController)
}

let firstViewController = detailPageViewController.detailViewControllers[sender.indexNumber]
detailPageViewController.pageViewController.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)

detailPageViewController.detailViewControllers[sender.indexNumber].indexNumber = sender.indexNumber

navigationController?.pushViewController(detailPageViewController, animated: true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,14 @@ protocol HomeViewModelDelegate: AnyObject {
func updateData()
}

protocol WeatherButtonDelegate: AnyObject {
func weatherButtonTapped(sender: WeatherListButton)
}

final class HomeViewModel: NSObject {

weak var homeSearchBarDelegate: HomeViewModelDelegate?
weak var weatherButtonDelegate: WeatherButtonDelegate?

var resultArray: [WeatherResponseDTO] = []
var mainWeathersData: [WeatherResponseDTO] = []
Expand All @@ -34,7 +39,6 @@ final class HomeViewModel: NSObject {
print("Failed to get weather data for \(cityName): \(error)")
}
}

self.mainWeathersData = weatherDataArray
self.resultArray = self.mainWeathersData
return true
Expand Down Expand Up @@ -73,29 +77,15 @@ extension HomeViewModel: UICollectionViewDataSource {

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeWeatherCollectionViewCell.identifier, for: indexPath) as? HomeWeatherCollectionViewCell else { return UICollectionViewCell() }
cell.weatherButton.weatherButtonDelegate = self
cell.weatherButton.addTarget(self, action: #selector(weatherButtonTapped), for: .touchUpInside)
cell.bindData(data: resultArray[indexPath.row])
cell.weatherButton.indexNumber = indexPath.row
return cell
}
}

extension HomeViewModel: WeatherButtonDelegate {
func weatherButtonTapped(sender: WeatherListButton) -> UIViewController {
let detailPageViewController = DetailPageViewController()

for index in 0..<resultArray.count {
let detailViewController = DetailViewController()
detailViewController.indexNumber = index
detailViewController.detailWeatherData = resultArray[index]
detailPageViewController.detailViewControllers.append(detailViewController)
}

let firstViewController = detailPageViewController.detailViewControllers[sender.indexNumber]
detailPageViewController.pageViewController.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)

detailPageViewController.detailViewControllers[sender.indexNumber].indexNumber = sender.indexNumber

return detailPageViewController
extension HomeViewModel {
@objc func weatherButtonTapped(sender: WeatherListButton) {
weatherButtonDelegate?.weatherButtonTapped(sender: sender)
}
}

0 comments on commit c234940

Please sign in to comment.