+ ๋ด์ฉ์ ์ถ๊ฐํด์ ์๋์ ํฌ์คํ ์ ๋ค์ ํ์ต๋๋ค! https://gyuios.tistory.com/147 interactivePopGestureRecognizer navigationBar ๋ฅผ ์จ๊ธฐ์ง ์์ ์ํ๋ผ๋ฉด ์ข์ธก์์ ์ฐ์ธก์ผ๋ก ์ค์์ดํํ๋ฉด push ๋ ๋ทฐ์ปจ์ด pop ๋๋ค. ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ์จ๊น ์ํ๋ผ๋ฉด navigationController?.navigationBar.isHidden = true ์ค์์ดํํด๋ pop ๋์ง ์๋๋ค. ์ด๋ interactivePopGestureRecognizer ๋ฅผ ์ฌ์ฉํ๋ฉด pop ํ ์ ์๋ค, override func viewDidLoad() { super.viewDidLoad() self.delegate = self self.dataSource = self if l..
scrollViewDidScroll(_:) ๋ ์ด์์ ์ก๊ธฐ tableView.contentInset.top ๊ณผ ๊ฐ์ด inset ์ ์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค. let table = UITableView(frame: .zero, style: .grouped) table.contentInset = UIEdgeInsets(top: 200, left: 0, bottom: 0, right: 0) table.contentOffset.y = -200 ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค๊ณ UITableView header ์ ํฌ๊ธฐ๋ฅผ custom UIView ๋งํผ ์ค์ ํด์ค์ tableview ์์ custom UIView ๋ฅผ ์น์๋ค. // MARK: - UITableViewDelegate extension ViewController: UI..
selectedBackgroundView ์ selectionStyle ์ ํ์ฉํด์ cell ์ด ์ ํ๋์์๋ ๋ถํ์ํ๊ฒ ๋ณํ๋ ํ์ ๋ฐฐ๊ฒฝ์ ์์จ ์ ์๋ค. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "StoryTVC") as? StoryTVC else { return UITableViewCell() } // ๋ฐฉ๋ฒ 1 // let backgroundCell = UIView() // backgroundCell.backgroundColor = .white // cell...
UIPageViewController import UIKit class MainPageVC: UIPageViewController { // MARK: - Properties private var currentIndex = 0 lazy var vcArray: [UIViewController] = { return [self.vcInstance(name: "ViewController"), self.vcInstance(name: "AddVC")] }() private func vcInstance(name: String) -> UIViewController { return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifie..
๊ธฐ๋ณธํฐํธ ์ปค์คํ ํฐํธ๋ก ์ค์ 1.ํ๋ก์ ํธ ๋ด์ ํฐํธ๋ฅผ ๋ณต์ฌํ๊ณ Target Membership ์ค์ ํ๊ธฐ 2.info.plist ์์ textLabel.font = UIFont(name: "customfont", size: 17) ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฅ์๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ๋ฉด๋๋ค. 3.์ด์ ๊ธฐ๋ณธํฐํธ๋ก ์ค์ ํด๋ณด์ Extension.swift ์์ ์ค์ import Foundation import UIKit struct AppFontName { static let regular = "NanumMyeongjo-Regular" static let bold = "NanumMyeongjo-Bold" static let italic = "SpoqaHanSans-Italic" } extension UIFontDescriptor..
SubView ์ ๊ฑฐ // ์ถ๊ฐํ ์๋ธ๋ทฐ๋ฅผ ์์ฑ var imageView:UIImageView? // ์๋ธ view ๋ฅผ ์๋ณํ ํ๊ทธ๋ฅผ ์ง์ imageView?.tag=100 // ์๋ธ ๋ทฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ let viewWithTag = self.view.viewWithTag(100) // ํด๋น ๋ทฐ๋ฅผ ์ ๊ฑฐํ๋ค viewWithTag.removeFromSuperview() ์ถ์ฒ ์ถ์ฒใ ฃhttps://devureak.tistory.com/13
UITableView ๋น๊ฒจ์ ์๋ก๊ณ ์นจ //MARK: - View Life Cycle override func viewDidLoad() { //... setUI() } //MARK: - @obcj Methods @objc func pullToRefresh(refresh: UIRefreshControl) { print("pullToRefresh()") refresh.endRefreshing() //์๋ก๊ณ ์นจ ์ ์ ์ฉํ๊ณ ์ถ์ ์ฝ๋. tableView.reloadData() } private func setUI() { //... // ๋น๊ฒจ์ ์๋ก๊ณ ์นจ let refreshControl = UIRefreshControl() // ์ด๋ฏธ์ง ์๋ณด์ด๊ฒ ํ๊ธฐ // refreshControl.tintColor = .clear..
Core Data ์ ๋ํด์ Core Data ๋ iOS ๊ธฐ๋ณธ ํ๋ ์์ํฌ์ด๋ค. UserDefaults ๋ app setting ๊ฐ์ ๊ฐ๋จํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ํฉํ๋ค๋ฉด Core Data ๋ ๋ณต์กํ๊ณ ํฐ user data ๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ํฉํ๋ค. ์๋ฅผ ๋ค์ด ๋ด ์์ดํฐ ๋ด์์์ ๊ฒ์ ๊ธฐ๋ก๊ณผ ๊ฐ์ด ์๊ฐ๊ณผ ํค์๋์ ํด๋นํ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ์ UserDefaults ๋ณด๋ค ์ ํฉํ ์ ์๋ค. 'Core Data ๋ Database ์ธ๊ฐ?' ์๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ธฐ ์ํ API ๋ ์๋๋ค. ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊ด๋ฆฌํ๋ Framework ์ด๋ค. ์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋์คํฌ์ ์ ์ฅํ์ฌ Persistence ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ ๊ฒ์ด๋ค. ๋ณดํต ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด์ Core Data ๋ฅผ ์ฌ์ฉํ๋๋ฐ Persist..
- APNS
- github
- projectsetting
- Objective-C
- WWDC22
- SwiftUI
- Widget
- rxswift
- ์๋ฒํต์
- IOS
- 2022 KAKAO TECH INTERNSHIP
- Algorithm
- WidgetKit
- WWDC
- Firebase
- containerBackground
- YPImagePicker
- UserDefaults
- OpenSourceLibrary
- Protocol
- async/await
- watchOS
- urlsession
- Notification
- MOYA
- CloneCoding
- RxCocoa
- Swift
- MVVM
- configurable widget
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Total
- Today
- Yesterday