์๋ ํ์ธ์ Foma ์ ๋๋ค!
์์ฆ ๋ค์ด ๋ ์จ ๋์ฐ๊ธฐ๋ฅผ ๊ณต๋ถํ๊ณ ์๋๋ฐ์.
์คํฌ๋กค๋ทฐ์ ์ปค์คํ ํ UIView๋ฅผ ๋ฃ๊ธฐ ์ํด์ xib๋ก ๋ฐ๋ก ๋ ์ด์์์ ์ก์์ ๋ง๋ค๊ณ ์ ์ฉํ๋๋ฐ์.
์ด ๊ณผ์ ์ ์ ๋ฆฌํด๋๊ณ ๊ณต์ ํด๋๋ฆฌ๊ณ ์ถ์ด์ ๊ธ์ ์ ๊ฒ ๋์์ต๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
Preview
์ ๊ฐ ๋ง๋ค๊ณ ์ถ์ ํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ScrollVIew ์์ ์ปค์คํ ํ UIView๋ฅผ ์น์ด์ ์คํฌ๋กค์ด ์ข์ฐ๋ก ๋๊ฒ๋ ๋ง๋๋ ๊ฒ์ ๋๋ค.
UIView์๋ ํ ์ด๋ธ๋ทฐ์ ์ปฌ๋ ์ ๋ทฐ๋ ๋ค์ด๊ฐ ์์ต๋๋ค.
๋จผ์ WeatherView๋ผ๋ UIView Swift ํ์ผ๊ณผ xib ํ์ผ์ ๋ง๋ค์ด์ค๋๋ค.
xib ํ์ผ์ ๋ง๋๋ ๋ฒ์ new File์์ User Interface์์ View๋ฅผ ๊ณจ๋ผ์ฃผ์๊ณ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Xib
xibํ์ผ์์ ์ํ์๋ ๋ ์ด์์์ ์ค์ ํด์ฃผ์ธ์!
์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ธํ ํ์ต๋๋ค.
์ฃผ์ํ์ค์ ์ xibํ์ผ์ ์ผ์ชฝ ๋ถ๋ถ์ File's Owner๊ฐ ๋ณด์ด์ค๊ฑฐ์์.
์ด๊ฑธ ํด๋ฆญํด์ฃผ์ ๋ค์
Custom Class ์ด๋ฆ๊ณผ File's Owner Class ์ด๋ฆ์ WeatherView๋ก ํด์ฃผ์ธ์!
WeatherView
WeatherView์ ๋ชจ๋ ์ฐ๊ฒฐํด์ฃผ๊ณ ์๋์ ๊ฐ์ด ์ด๊ธฐํ๋ฅผ ํด์ค๋๋ค.
class WeatherView: UIView {
//MARK:IBOutlets
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var dataLabel: UILabel!
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var weatherInfoLabel: UILabel!
@IBOutlet weak var weeklyTableView: UITableView!
@IBOutlet weak var hourlyInfoCollectionView: UICollectionView!
@IBOutlet weak var hourlyCollectionView: UICollectionView!
//MARK:LifeCycle
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
WeatherViewController
์ด UIView๋ฅผ ๋์ฐ๊ธฐ ์ํ WeatherViewController๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์!
viewDidLoad()์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ด์ค๋๋ค.
์ ๋ scrollView์ addSubView ํ๋๊ฑฐ๋ผ scrollView๋ก ํ๋๋ฐ view์ ์ ์ฉํ์ค๋ถ๋ค์ scrollView๋ง view๋ก ๋ฐ๊ฟ์ฃผ์๋ฉด ๋ฉ๋๋ค.
override func viewDidLoad() {
super.viewDidLoad()
guard let weatherView = Bundle.main.loadNibNamed("WeatherView", owner: self, options: nil)?.first as? WeatherView else { return}
weatherView.frame = CGRect(x: 0, y: 0, width: scrollView.bounds.width, height: scrollView.bounds.height)
scrollView.addSubview(weatherView)
//view์ ๋ฃ์๋ ์๋์ ๊ฐ์ด ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
// weatherView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
// self.view.addSubview(weatherView)
}
Bonus
์์ ๊ฐ์ด UIView์ ์ปฌ๋ ์ ๋ทฐ์ ํ ์ด๋ธ๋ทฐ๋ฅผ ๋์ฐ๊ธฐ ์ํด์
๋ค์๊ณผ ๊ฐ์ด ์ธํ ์ ํด์ฃผ์ ์ผํฉ๋๋ค.
์ํ์๋ tableView or CollectionView๋ฅผ
register(UINib(nibName:ํ ์ด๋ธ๋ทฐ์ ์ด๋ฆ,bundle:Bundle.main),forCellReuseIdentifie:์ ์์ด๋ดํฐํผ์ด)๋ก ํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ ํ ์ด๋ธ๋ทฐ or ์ปฌ๋ ์ ๋ทฐ์ dataSource๋ฅผ self๋ก ํด์ฃผ์ธ์
class WeatherView: UIView {
//MARK:IBOutlets
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var dataLabel: UILabel!
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var weatherInfoLabel: UILabel!
@IBOutlet weak var weeklyTableView: UITableView!
@IBOutlet weak var hourlyInfoCollectionView: UICollectionView!
@IBOutlet weak var hourlyCollectionView: UICollectionView!
//MARK:LifeCycle
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
func setupTableView() {
weeklyTableView.register(UINib(nibName: "WeeklyTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
weeklyTableView.dataSource = self
}
func setupCollectionView(){
hourlyCollectionView.register(UINib(nibName: "HourlyCollectionViewCell", bundle: Bundle.main), forCellWithReuseIdentifier: "Cell")
hourlyCollectionView.dataSource = self
hourlyInfoCollectionView.register(UINib(nibName: "HourlyInfoCollectionViewCell", bundle: Bundle.main), forCellWithReuseIdentifier: "Cell")
hourlyInfoCollectionView.dataSource = self
}
๊ทธ๋ฆฌ๊ณค ๋ค์ WeatherViewController๋ก ์ด๋ํด์
์๋์ ๊ฐ์ด ๋ง๋ค์ด์ค ํจ์๋ฅผ ์คํ์์ผ์ค๋๋ค.
WeatherViewController
guard let weatherView = Bundle.main.loadNibNamed("WeatherView", owner: self, options: nil)?.first as? WeatherView else { return}
weatherView.frame = CGRect(x: 0, y: 0, width: scrollView.bounds.width, height: scrollView.bounds.height)
weatherView.setupTableView()
weatherView.setupCollectionView()
scrollView.addSubview(weatherView)
์ด๋ ๊ฒ ์คํํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ์ ์์ ์ผ๋ก ๋จ๋๊ฑธ ๋ณผ ์ ์์๊ฑฐ์์!
P.S
์ฒ์์ WeatherView์ override init์์ WeatherViewController์์ ํ๋ ๊ณผ์ ๋ค์ ๋ฃ์๋ค.
๊ทธ๋ฐ๋ฐ ๊ณ์ required init์์ fatalError๊ฐ ๋๊ณ ๊ทธ๋ฅ fatalError๋ฅผ ๋นผ๋ฒ๋ฆฌ๊ณ ํ๋๊น tableView์์ ์๋ฌ๊ฐ ๋๊ณ ๊ทธ๋ฌ๋ค.
๊ฒฐ๊ตญ ViewController์์ loadnibNamed๋ฅผ ํด์ฃผ๊ณ tableView,collectionView register ํจ์๋ฅผ ์คํ์์ผ์ฃผ๋ ์๋ฌ๊ฐ ํด๊ฒฐ๋๋ค.
๋๊ธ