iOS/UIKit 22

[iOS] TableView, CollectionView refresh 하기 (새로고침)

보통 앱을 사용하다 보면 위로 슬라이드해서 새로고침 하는 부분이 많습니다.(ex. 유튜브, 당근마켓) 그래서 CollectionView에서 새로고침 하는 방법에 대해 알아보겠습니다. (TebleView도 동일합니다.) 기본적으로 CollectionView에는 기본적으로 refreshControl이라는 프로퍼티가 있어서 여기에 refreshController를 만들고 넣어주면 됩니다. 1. refreshController 만들기 // 코드로 refreshControl 선언해서 만들기 private lazy var refresh: UIRefreshControl = { let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: ..

iOS/UIKit 2022.03.26

[iOS] 앱 실행시 조건에 따라 다른 viewController로

구글 로그인을 구현하다가 로그아웃을 하지 않으면 메인 페이지로, 로그인이 되어있지 않은 상태면 로그인 페이지로 가도록 구현하는데 고민을 했습니다. 다음 포스팅을 참조해서 SceneDelegate의 scene에 구현하니 작동이 잘 되었습니다. [iOS] StoryBoard를 쓰지 않고 코드로 작성하기 아래 구현은 google 로그인을 조건으로 작성한 코드이고 이를 응용하면 상황에 따른 시작 지점을 변경해줄 수 있을듯 합니다. // SceneDelegate class func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // 새로 작성해준 코..

iOS/UIKit 2022.03.02

[iOS] TableView 스크롤위치 변경(하단으로 스크롤)

채팅 앱을 tableview로 구현하는데 어떻게 하면 TableView를 하단으로 내릴 수 있을까 고민했습니다. 방법을 찾았는데 scrollToRow를 이용하는 방법이 있었습니다. 애플 공식 문서 저는 talks 라는 배열에 cell의 정보를 담아두었으므로 row에는 cell의 개수-1 값을 주어 마지막 cell의 row를 알려주었고 section은 하나만 사용해서 0을 사용했습니다. 그리고 해당 cell의 아래로 가기 위해 .bottom을 할당했습니다. animation은 true이면 주르륵 내려가는데 false로 주어 채팅방에 들어갔을 때 바로 최하단이 보이도록 하였습니다. scrollToRow let index = IndexPath(row: self.talks.count - 1, section: 0..

iOS/UIKit 2022.03.02

[iOS] Label에 Padding 주기(StoryBoard), Label에 cornerRadius 주기

Label에 padding 주기 라벨에 패딩을 쉽게 주는 방법을 알아보겠습니다. 사실 저장해두고 써먹으려는... (근데 왜 CSS 처럼 padding이나 margin이 없을까...?) 암튼 View 안에 label을 넣어 padding을 주는 방법도 있다고 하는데 여기서는 @IBDesignable을 이용하도록 하겠습니다. @IBDesignable을 설정해주면 스토리보드에서 클릭으로 설정이 가능한 창이 생성됩니다. 사용 방법은 간단합니다. 1. Swift 파일을 만든다. 2. Label의 class에 만든 Swift의 class를 할당해준다. 3. 속성 인스펙터에 새로운 창이 생겼으니 padding을 조절하면 된다! import Foundation import UIKit @IBDesignable class..

iOS/UIKit 2022.03.02

[iOS] Transform을 이용해 KeyBoard 이벤트 처리

키보드가 필요한 작업을 하려고 하니 TextField가 가려지는 현상이 발생했습니다. 아마 많은 분들이 같은 문제를 겪고 계실거라 생각되는데 한번 키보드 높이 만큼 textfield를 이동시켜 가려지지 않게 하고 키보드가 내려가면 다시 원래 위치로 돌아가는 이벤트를 처리해 보겠습니다. 1. 키보드 상승 및 하강을 보고 이벤트를 실행시키기 위해 옵저거 달기 먼저 저는 필요한 화면의 viewWillAppear에 선언해 주었습니다. (메모리를 위해 viewWillDisappear에서 옵저버를 해제해 주셔야 합니다.) override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 키보드가 나올때 observing Notific..

iOS/UIKit 2022.03.02

[iOS] collectionView 헤더(Header) 커스텀 및 사용

collectionView에서 cell은 등록하고 dequeueReusableCell 메서드로 불러와 사용했습니다. 하지만 Header는 비슷하지만 조금 다른 방식을 사용해 정리해 보려 합니다. 먼저 헤더는 UICollectionReusableView을 준수합니다. cell -> UICollectionViewCell와 다름 Header -> UICollectionReusableView 이후 헤더를 커스텀하는 방식은 기존cell처럼 하시면 됩니다. 이제 헤더를 collectionView에 register하고 불러와 사용해 보겠습니다. register collectionView.register( "헤더class".self, // 이 부분으로 header임을 구분할 수 있다. forSupplementaryVi..

iOS/UIKit 2022.02.22

[iOS] collectionView 메서드, 프로퍼티 일부 정리

추후 업데이트 예정 다른 포스팅과 내용 중복 가능 collectionView 설정 // collectionView 선언(@IBOulet이 아닌 code) private lazy var collectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .horizontal // 스크롤 방향 let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.delegate = self collectionView.dataSource = self collectionView.isPaging..

iOS/UIKit 2022.02.22

[iOS] tableView의 메서드, 프로퍼티 일부 정리

추후 업데이트 예정 TableViewCell 관련 // cell class에 설정 // cell의 오른쪽에 화살표 생긴다. (옵션에 따라 다름) accessoryType = .disclosureIndicator // cell을 선택해도 회색이 되지 않는다. selectionStyle = .none Section 관련 메서드 // 섹션의 수 override func numberOfSections(in tableView: UITableView) -> Int { return "section의 수" } // 섹션당 row의 갯수 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // 0부터 시..

iOS/UIKit 2022.02.22

[iOS] TableView의 prefetching 기능

간단한 기능이지만 tableView에서 유용하게 사용할 수도 있는 기능을 알게되어 정리합니다. 일단 이 method는 화면에서 tableView의 cell이 보여지려고 할때 미리 작동되는 함수라고 생각하면 될 것 같습니다. 그래서 스크롤을 할때 다음 cell이 보여지기 전에 어떠한 이벤트를 처리하고 싶다라고 생각할때 유용하게 사용이 가능할듯 합니다. 사용 방법은 간단합니다. 1. UITableViewDataSourcePrefetching를 extension 합니다. 2. tableView.prefetchDataSource = self 를 viewDidLoad에 작성해줍니다. 3. prefetchRowsAt 메서드를 사용합니다. func tableView(_ tableView: UITableView, pr..

iOS/UIKit 2022.02.22

[iOS] StoryBoard를 쓰지 않고 코드로 작성하기

1. info.plist에서 StoryBoard Name 삭제 2. 프로젝트에서 Deploymet Info에서 Main interface를 지우기 (원래 Main) 3. SceneDelegate의 willConnectTo의 내용 다음으로 변경 guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) window?.backgroundColor = .systemBackground window?.rootViewController = 원하는 ViewController Class() // 기존 스토리보드의 시작지점과 같다고 생각 window?.makeKeyAndVisible()

iOS/UIKit 2022.02.22