분류 전체보기
-
외부 영역 터치시 키보드 사라지게 하는방법 in TableView개발/Swift 2022. 12. 5. 14:22
키보드를 입력중에 다른 영역을 터치하면 키보드가 사라지기를 원할수 있다. 이때 가장 쉬운 방법으로 이렇게 구현한다 //VC private func setDismissKeyboardEvent() { let gesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) self.view.addGestureRecognizer(gesture) } @objc private func dismissKeyboard() { self.view.endEditing(true) } Viewcontroller의 뷰에 제스처를 부여해서 endEditing을 호출하면 키보드가 알아서 껒여준다. 그런데 여기서 문제점이 있다. 만약 view 안에 테이..
-
Compositional Layout + Diffable DataSource - 2 헤더 추가하기개발/Swift 2022. 11. 27. 15:35
헤더 추가하기 우선 새로운 타입 sqaure carousel 섹션을 추가했다. 여기서는 새로운 타입의 아이템을 넣어줬다. enum Item: Hashable { case banner(HomeItem) case normalCarousel(HomeItem) case squareCarousel(RestaurantItem) } struct RestaurantItem: Hashable { let name: String let reviewPoint: Float let reviewCount: Int let imageUrl: String } 이러면 데이터소스에 넣어줄때 RestaurantItem 타입을 넣어주고 cell 그릴때 RestaurantItem 타입의 데이터를 받아 사용할수 있다. //스냅샷 부분 snapsh..
-
Compositional Layout + Diffable DataSource - 1 (배너타입, 작은 리스트)카테고리 없음 2022. 11. 25. 18:14
쿠팡이츠 메인 피드 화면처럼 콜렉션뷰를 구현해보려 한다. 맨위에 배너가 있고 그 아래 작은 리스트, 그 아래 사각형의 리스트가있다. 그리고 특이점은 모든 형태가 다 다른 타입의 데이터를 가지고 있다 배너 - 배너 작은 리스트 - 음식종류(category) 사각형 리스트 - 식당이름(restaurant) Section으로 섹션 타입을 구분하지 않고 Item 으로 구분하기로 했다. struct Section: Hashable { let id: String } enum Item: Hashable { case banner(HomeItem) case normalCarousel(HomeItem) case circleCarousel(HomeItem) } struct HomeItem: Hashable { var tex..
-
[Swift] Compositional Layout - DiffableDataSource 와 함께 사용개발/Swift 2022. 11. 23. 17:00
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Swift Modern Collection View & MVVM 패턴 가이드 강의 - 인프런 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이아웃 구현을 www.inflearn.com 기존 datasource 구조에서 data controller 와 UI 가 상호작용하면 서 collectionview가 구성되는데 시간이 지남에따라 외부적인 변동으로 인해 controller가 가진 “Truth”와 UI가 가진 “Truth”가 맞지 않게..
-
[Swift] Compositional Layout - 헤더, 다양한 layout적용개발/Swift 2022. 11. 23. 15:16
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Swift Modern Collection View & MVVM 패턴 가이드 강의 - 인프런 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이아웃 구현을 www.inflearn.com 헤더 추가하기 헤더를 추가하기 위해 다음작업들이 필요하다 헤더 구현( UICollectionReusableView ) 헤더 레지스터 헤더를 데이터소스에 추가 헤더를 레이아웃에 추가 헤더를 레지스터하는 방법은 cell레지스터와 비슷하다 collection..
-
[Swift] Compositional Layout - 레이아웃 그려보기개발/Swift 2022. 11. 22. 16:45
Modern Collection View 와 MVVM 패턴 가이드 다양한 사이즈 형태의 collection view를 구현 하기 위해 Group을 잘 짜줘야 한다. let group = NSCollectionLayoutGroup.vertical( layoutSize: NSCollectionLayoutSize( widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalWidth(16/9)), subitems: [다양한 그룹들]) (각 그룹들의 높이는 고정값으로 지정했으니 무시) 위 그룹의 subItems 안에 다양한 타입의 그룹이 들어갈것이고 해당 그룹들은 vertical 하게 들어갈것이다. 다음 예시를 통해 여러 타입의 collectionvi..
-
Closure 의 Capture 와 Self개발/Swift 2022. 11. 21. 15:58
var a = 0 var b = 0 let closure = { print(a,b) } a = 5 closure() 위와같은 상황에 클로져가 호출될때 a가 직전에 5로 변경되었으므로 5 0 이 호출 된다. 이게 클로져의 기본동작이다. 원본값이(a) 변하면 클로져 내부값도 변하는 “Reference capture”를 한다. var a = 0 var b = 0 let closure = { [a] in print(a,b) } a = 5 closure() 위 클로져에서는 [a] in 을 넣어줬다. 이때 결과값은 0 0 이 된다. 클로져를 "생성" 할때 변수 a 를 a라는 상수로 capture한다. (따라서 변경 불가) 위와 같은 [a] 이런것을 Capture List라 한다. 따라서 클로져 내부에서 Captur..
-
DispatchQueue 에서 주의할 데드락 현상개발/Swift 2022. 11. 21. 13:39
멀티스레딩을 사용할경우 Dispatch Queue를 사용해 main 혹은 global 큐를 통해 스레드를 지정해 작업을 하게된다. 이때 사용에 유의 해야할 점들이있다. DispatchQueue.main.sync (데드락100) UI작업은 메인스레드에서 작업하게 된다. 현재 상황이 메인스레드라면 이 안에서 main.sync를 사용하면 안된다. //Main스레드 DispatchQueue.main.sync{ // 작업 } 메인큐로 작업을 보냄 작업이 끝날때 까지 메인스레드 대기 - sync 보내진 작업이 메인스레드로 전달 (대기중인데 전달됨) 데드락 스레드가 대기중인 상황에서 작업이 또 온다? - 데드락 메인스레드 상황 내가 대기하고 있던 작업이 끝날때까지 계속 기다리는중 또 다른 작업이 뒤에 와도 내 현재 ..