TIL_20180820 ~ 20180825
20 Aug 2018 | TIL2018.08.20
- ๋ค๋น๊ฒ์ด์ bar์ ๊ฐ๋ ค์ง๋ frame ์์
- ์ฝ๋๋ก safeArea์์ญ ์์๋ด๋๋ฒ ์์นญ
2018.08.22
- ํธ์์ ๋ํด์ ๊ณต๋ถ!
- ๊ผผ๊ผผํ ์ฌ์์จ - ๋ก์ปฌํธ์๋ถํฐ ๋จผ์ ใ _ใ
์ง๋ฌธํฌ์ฑ์ด
์๋ฆฐ [8:08 PM]
์ฌ๋ฌ๋ถใ
ใ
๋ง์ฝ ๋ฃจํธ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ์ฑ๊ธํค ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด AppDelegate์ `application()`ํจ์๊ฐ ์คํ๋๊ธฐ๋ ์ ์ ๋จผ์ ๋ฃจํธ๋ทฐ์ปจํธ๋กค๋ฌ์ ํ๋กํผํฐ๊ฐ ์ด๊ธฐํ๋๋๊ฑด๊ฐ์โฆ?
class MainViewController: UIViewController {
let favorites = FavoriteList.shared().martList
...
}
์ฑ๊ธํค ํ๋กํผํฐ๋ ์ ๋ ๊ฒ ๊ฐ์ง๊ณ ์๊ณ ์, ๋์์ ์ด์ํ๊ฒ ํ๊ธธ๋ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ๊ฑธ์ด๋ดค๋๋ ๋จผ์ ์ ์ฝ๋์ `let favorites = FavoriteList.shared().martList` ์ด๊ฒ ๋จผ์ ์คํ๋๊ณ ๊ทธ ๋ค์์ `application()`ํจ์๋ฅผ ํ๋ค์! ๋ญ๊ฐ ์ด์ํ๊ฑด์ง ํ์ ํ ์๊ฐ ์์ด์ ์ง๋ฌธํฉ๋๋น!โฆ?_?
๋
์คํฐ [8:18 PM]
๋ทฐ๋๋๋ก๋ํ ๋ ์ด๊ธฐํํ๋ฉด ์ด๋จ๊น์
Mason [8:36 PM]
static์ ํญ์ ๋จผ์ ํ ๋น๋๋๊ฑธ๋ก ์๊ณ ์์ต๋๋ค
ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์์ static์ผ๋ก ์ ์ธ๋ ํ๋กํผํฐ๊ฐ ์์๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ~์ ๊ทผํ ์ ์๋์ด์ ๋ก ์๊ณ ์์ด์~ static์ ๊ธ๋ก๋ฒ ์์ญ์ด๋ผ์(๊ฐ์ฌํฉ๋๋ค ์ ์ด์ผ์ด) (edited)
shared()๋ ํ์
๋ฉ์๋๋ผ๋ฉด static์ฒ๋ผ ๋จผ์ ๋ฉ๋ชจํ์ ์ฌ๋ผ๊ฐ์ ๊ทธ๋ฌ์ง ์์๊น์
๋ง์ฝ์ FavoriteList๊ฐ ์ฑ๊ธํค ๊ฐ์ฒด๋ผ๋ฉด ๊ตณ์ด ํ๋กํผํฐ๋ก ๊ฐ๊ณ ์์ ํ์๊ฐ ์์ด๋๋ ๊ฑฐ๊ฐ์์
์๋ฆฐ [8:39 PM]
๋ค๋ค ์ฌ์ค ์ ๊ฑด ๋๋์งํ์ธ์ ์ํด์ ๊ธํ๊ฒ ์ง ์ฝ๋๋ผโฆใ
ใ
ใ
๊ทธ๋์ ์ง๊ธ์ ๋ฃจํธ๋ทฐ์ปจํธ๋กค๋ฌ์ ํ๋กํผํฐ๋ฅผ ์ฑ๋ธ๋ฆฌ๊ฒ์ดํธ์์ ํ ๋นํด์ฃผ๋๊ฑธ๋ก ๋ฐ๊ฟจ์ด์
static์ด๋ผ์ ๋จผ์ ๋ธ๋ ์ดํฌํฌ์ธํธ์ ๊ฑธ๋ฆฌ๋๊ฑฐ์๊ตฐ์ ์ ๋ applicationํจ์๋ณด๋ค ๋ค๋ฅธ๊ฒ ๋จผ์ ์คํ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ง๊ธ ์ฒ์ ๋ด์ใ
ใ
ใ
๋ชฐ๋๋ค์ ๊ฐ์ฌํฉ๋๋ค
Mason [8:49 PM]
ํ์
ํ๋กํผํฐ๋ ์ผ๋ฐ ํ๋กํผํฐ๋ ์ด๊ธฐํ ์์ ์ด ์์ ๋ฌ๋ผ์ ๊ทธ๋ด๊ฑฐ์์ static์ ํญ์ ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ๋๋ ์ด์ ๋ก ์๊ณ ์์ด์
@JK ๊ถ๊ธํฉ๋๋ค ํ๋ก๊ทธ๋จ ์คํ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์คํ์ด ๋จผ์ ํ ๋น์ด๋๋์?
JK [8:52 PM]
์คํ์ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์
๋๋ค. ๋จผ์ ๋ผ๋๊ฑด ์๋์ ์ธ ์๊ฐ์ฐจ์ด์ผ ๋ฟ์ด์ฃ .
JK [8:58 PM]
์ฐธ๊ณ ๋ก static์ ๊ธ๋ก๋ฒ ๋ณ์ ๊ฐ๋
์ด๋ผ ๋ก๋ฉ์์ ์ ๋จผ์ ์์ฑ๋๊ธฐ๋ ํฉ๋๋ค.
Mason [8:58 PM]
class์ struct์๊ด์๋์?
ํด๋์คํ๋์์ ์ ์ธ๋ static๋ ํ์ด ์๋ ์คํ ๊ณต๊ฐ์ ์ฌ๋ผ๊ฐ๋์?(๋ณ๋ก ์ค์ํ๊ฑด ์๋๋๋ค...) (edited)
JK [9:08 PM]
์์ static ์๊ธฐํ ๊ธ๋ก๋ฒ์ ์คํ. ํ๊ณผ ๋ณ๊ฐ์ธ ๊ธ๋ก๋ฒ ์์ญ์
๋๋ค.
JK [9:14 PM]
@์๋ฆฐ rootVC๊ฐ AppDelegate.window ์ ๋ค์ด๊ฐ๋ ์ธ์คํด์ค๋ผ์ ์ด๊ธฐํ ์์ ์ ๋ง๋ค์ด์ง๋๋ค. ๊ทธ๋ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋๊ฑฐ์ฃ .
๊ทธ๋ฆฌ๊ณ ๋์ ๋ฉ๋ชจ๋ฆฌ ์์
์ด ๋๋๋ฉด ์ฝ๋ฐฑ์ด ํธ์ถ๋๊ณ !!
Mason [9:17 PM]
๋ ๋ฐฐ์๊ฐ๋๋ค
๋
์คํฐ [10:09 PM]
์์ฐ
์๋ฆฐ [2:05 PM]
@JK ์ด์ ๋ต๋ณ์ฃผ์ ๊ฑฐ์๋ํด์ ๊ถ๊ธํ๊ฒ ์๋๋ฐ์ใ
_ใ
์ด์ ๋ ๋ ํ๋ค๋ณด๋๊น
์ง๊ธ ์ ์ฑ์ ๋ชจ๋ ๋ทฐ์ปจ์ด ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ์ embed๋์ด์์ด์,
์ฑ๋ธ๋ฆฌ๊ฒ์ดํธ์์ `let rootVC = self.window?.rootViewController` ์ด๋ ๊ฒ ์ ๊ทผํ ๋ฃจํธ๋ทฐ ์ปจํธ๋กค๋ฌ๋ MainViewController๊ฐ ์๋๋ผ UINavigationControllerํ์
์ด๋๋ผ๊ณ ์
๊ทผ๋ฐ ์ด์ ์ let favorites ๋ณ์๋ MainViewController์ ํ๋กํผํฐ์๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ด์ ๋ง์ํ์ ์ด๊ธฐํ์์ ์์๋ ๋ฃจํธ๋ทฐ์ธ UINavigationController๋ฟ๋ง์ด ์๋๋ผ ์ MainViewController๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋๊ฑด๊ฐ์?_?
์ ์ถ์ธก์ entry point๊ฐ ์๋ฌด๋ฆฌ ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ์ฌ๋ ์ฒซ ํ๋ฉด์ MainViewController๊น์ง ๋ณด์ด๋๊น window๊ฐ ์ฒ์์ ๋ณด์ด๋ ๋ชจ๋ ํ๋ฉด์ ๋ค ์ด๊ธฐํํ๋ ค๊ณ ํด์ ๊ทธ๋ฐ๊ฑฐ๊ฐ๋ค๊ณ ์๊ฐ์ ํ๋๋ฐ..๊ถ๊ธํด์์!
๋
์คํฐ [2:06 PM]
๋ฉ์ธ๋ทฐ๊ฐ์์ด์ผ ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ์์ด์ ๊ทธ๋ฐ๊ฑฐ์๋๊น์ ๋ผ๋ ์ถ์ธก์ ๋จ๊ธฐ๊ณ ์ฌ๋ผ์ง๋๋ค..
์๋ฆฐ [2:07 PM]
์๋ผโฆ
jake [2:07 PM]
๋น๋ ์์ ์์ ๋ชจ๋ ํด๋์ค๋ ์คํธ๋ญํธ๋ฅผ ๊ฒ์ฌํ ๊ฑฐ์์
๊ทธ๋ฌ๋ฉด์ ํ๋ฉ๋ชจ๋ฆฌ๋ ์คํ์ ์์๊ฒ๋ค์ด ๊ตฌ๋ถ๋์ด์ ์ ์ฅํ๊ณ ์๋๋ฐ
๊ทธ ๊ณผ์ ์์ static๋ณ์๊ฐ ๋ฐ๋ก ๊ด๋ฆฌ๋๋๊ฑฐ์ฃ
๊ทธ๋ฐ ๊ฒ๋ค์ด ์ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋์ค์ ๋ฐ๋ก ์ฐธ์กฐํด์ ์ฌ์ฉํ ์ ์๋๊ฑธ๋ก ์๊ณ ์์ต๋๋ค
์๋ฆฐ [2:13 PM]
์ํ ๊ทธ๋ผ `let favorites`๋ณ์๊ฐ ๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ ๋ก์ปฌ๋ณ์์๋ค๋ฉด ์ด์ ์ฒ๋ผ ๋์ํ์ง ์์์ ์ ์๊ฒ ๋ค์..? Favorites.shared()๋ผ๋ static์ ์ ๊ทผํด์ ๊ทธ๋ ๊ฒ ๋์ํ๊ฑด๊ฐ..
jake [2:15 PM]
main๋ง๊ณ ๋ค๋ฅธ๋ฐ๋ ์ฐ์ด๋ณด์
จ๋์? ๋ก๋ฒ ๋ณ์์๋ ์ฐ์ด๋ณด์ธ์
ํด๋์ค๊ฐ ๋ง๋ค์ด์ง๋ ์ ๋ถ ์ ๊ทผํ๊ณ
๋ง๋ค์ด์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ application์ด ๋์ํ๋๊ฒ ์๋๊ฐ ์ถ๋ค์
Mason [2:21 PM]
์ฐพ์๋ค..์์ ์ ๋ถ๋ช
ํ ์ ์ด์ผ์ด๊ฐ ๊ฐ์๋ ๋ณด์ฌ์ฃผ์
จ์๋๋ฐโฆ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ฌ๋ผ์ด๋์ ์์๋ค์!
Pasted image at 2018-08-22, 2:21 PM
GVAR์ ๊ธฐ๊ฐ ์ด์ ๋ง์ํด์ฃผ์ ๊ธ๋ก๋ฒ์์ญ์ธ๋ฏํฉ๋๋ค
static๋ณ์๋ ์ ์์ญ์ ์ ์ฅ๋๋๊ฑฐ๊ฒ ์ฃ
(์ ์ด๊ฑด ์๋ถ๋ค ์ง๋ฌธ๊ณผ ๋ณ๊ฐ๋กโฆ ๊ณต์ โฆ) (edited)
2018.08.23
- ๋ถ์คํธ์ฝ์ค ํน๊ฐ์ ๋ค๋ ์ด. ์ ์ ๊ฐ๋ฐ์๋ก ์ทจ์ ํด์ผํ ๋ ์ฑ๊ฒจ์ผ ํ ๊ฒ๋ค์ ์ ์ ์์๋ค.
2018.08.25
-
์ฃผ๋ง์ ํ๋ คํ๊ฒ ์ฅ์ํ
์ฝ๋ ์ ๋ทฐ ์ ์ ์ฝ๋ ์ ๋ทฐ ๋ฃ๊ธฐ
์ฝ์ง.. - FavoriteCollectionView์ cell ๋ด๋ถ์ ๋ ๋ค๋ฅธ ์ฝ๋ ์ ๋ทฐ๋ฅผ ๋ฃ์ด์ผํ๋ ์ํฉ(holidaysCollectionView)
- holidaysCollectionView๋ํ ๋ฉ์ธ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์ฐ๊ฒฐํ๊ณ delegate์ dataSource๋ฅผ ๋ด๋นํ๋ คํ์ผ๋ ๋ฐ๋ณต๋๋ ์์๋ outlet์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ค๋ ์๋ฌ ๋ฐ์
- FavoriteCollectionView์ ์ ์ด ์ฌ์ฌ์ฉ๋๋ฉด์ ๋ด๋ถ์ holidaysCollectionView๊ฐ ์ฌ๋ฌ๊ฐ ์๊ธฐ๊ธฐ๋๋ฌธ
- ๋ฐ๋ผ์ holidaysCollectionView์ delegate์ dataSource๋ MainViewController๊ฐ ๋ด๋นํ ์ ์๊ณ FavoriteCollectionView์ ์ (favoriteCell)์ด ๋ด๋นํด์ผ ํ๋ ์ํฉ
- ํ์ง๋ง favoriteCell์ ๋ทฐ์โฆ
- holidaysCollectionView์ delegate์ dataSource๋ฅผ ๋ด๋นํ ๋ค๋ฅธ ๋ชจ๋ธ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ favoriteCell๋ด๋ถ์์ ์์ ๋ด๋ถ์์๋ ์ฝ๋ ์ ๋ทฐ์ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ๋ฐ์ดํฐ์์ค๋ฅผ ๋ถ์ฌํ๋ ํ๋ฆ์ผ๋ก ๊ฐ๊ธฐ๋ก ๊ฒฐ์ ..!
- ์ฐธ๊ณ ๋งํฌ-stackoverflow
- โฆ.ํ์ง๋ง ๋ ์ง์ฝ๋ ์ ๋ทฐ๊ฐ ํ์๋์ง์์!
- ์์์ ํ๋ฆ์ ์ ๋ ๊ฒ ์ง์ ํ๊ณ , ์๋์ ๊ฐ์ด ์คํํ๋ค. ํ์ง๋ง ์ฝ๋ ์ ๋ทฐ์ ๋ด๋ถ์ ์ฝ๋ ์ ๋ทฐ๊ฐ ํ์๋์ง์๋๋ค..
- FavoriteCellํด๋์ค๋ ๋ทฐ์ด๊ธฐ๋๋ฌธ์ ์ ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ์ฝ๋ ์ ๋ทฐ(holidaysCollectionView)์ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ๋ฐ์ดํฐ์์ค ์ญํ ์ ๋ถ๋ฆฌํ๋ ค๊ณ ์๋
- ๋ธ๋ฆฌ๊ฒ์ดํธ์ ๋ฐ์ดํฐ์์ค ์ญํ ์ ํ๋
HolidaysManager
๊ฐ์ฒด ๋ง๋ฆ - holidaysManager๋ฅผ MainViewController(์ต์์๋ทฐ์ปจ)์์ favoriteCell์ ๋ง๋ค๋ setData()ํจ์์ ๋๊ฒจ์ฃผ๊ณ , ํจ์๋ด๋ถ์์ ํ์ ์ฝ๋ ์ ๋ทฐ(holidaysCollectionView)์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ง์ ํด์ฃผ์๋ค.
// MainViewController
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let martList = FavoriteList.shared().martList()
let cell = favoritesCollectionView.dequeueReusableCell(withReuseIdentifier: MainViewController.favoriteCellID, for: indexPath) as! FavoriteCell
let holidaysManager = HolidaysCollecionViewManager(dateData: martList[indexPath.row].holidays)
cell.setData(branch: martList[indexPath.row], holidaysManager: holidaysManager)
// FavoriteCell
func setData<T: UICollectionViewDataSource & UICollectionViewDelegate & UICollectionViewDelegateFlowLayout>(branch: Branch, holidaysManager: T) {
title.text = "\(branch.martType) \(branch.branchName)"
// holidayDateCollectionView ์ธํ
holidaysCollectionView.delegate = holidaysManager
holidaysCollectionView.dataSource = holidaysManager
holidaysCollectionView.reloadData()
}
// HolidayManager
class HolidaysCollecionViewManager: NSObject, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
var dateData: [String]
init(dateData: [String]) {
self.dateData = dateData
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.dateData.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "holidaysCell", for: indexPath) as! HolidaysCell
cell.setData(text: dateData[indexPath.row])
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width / 3, height: collectionView.frame.height/2.5)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 5
}
}
Comments