일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- SWIFT
- 리펙토링
- clean architecture
- map
- ribs
- 리팩토링
- HIG
- uiscrollview
- swiftUI
- Human interface guide
- 리펙터링
- RxCocoa
- Observable
- combine
- Protocol
- MVVM
- 스위프트
- UITextView
- uitableview
- Xcode
- 클린 코드
- tableView
- collectionview
- ios
- swift documentation
- rxswift
- Clean Code
- 애니메이션
- Refactoring
- UICollectionView
- Today
- Total
목록커스텀 뷰 (7)
김종권의 iOS 앱 개발 알아가기
커스텀 뷰 만들기간단한 커스텀 뷰의 경우는 단순히 데이터만 받아서 그 데이터에 맞게끔 뷰가 그려지지만, 데이터와 특정 뷰를 주입하여 그 뷰도 커스텀 뷰의 하나가 되도록 설계도 가능뷰를 주입받는 형태로 구현해야하는데 좋은 방법은? 아래에서 계속뷰를 주입받는 형태로 구현하는 테크닉ex) 예제로 사용할 뷰: 상단에 header 타이틀 형태가 있고 하단에는 배열로 넣어준 뷰들이 보여지는 뷰struct ContentView: View { var body: some View { CustomView(title: "상단 타이틀", items: [1,2,3]) { item in Text("item: \(item)") } }}1) 사용하는 쪽에서 만들 뷰에 필요한 데..
기초 개념) stored property와 computed property 메모리 관점 stored property - 별도의 메모리 공간 지정 o computed property - 별도의 메모리 공간 지정 x 사용 관점 stored property - 값을 저장 computed property - 접근하는 시점에 stored property들을 가지고 계산하여 반환 stored property를 사용할때 주의할 점 stored property를 사용하다보면 가장 큰 문제가, 상태 관리를 두 곳 이상에서 하는 경우가 발생 상태 관리를 두 곳 이상에서 하다보면 데이터 관리가 맞지 않아 코드 복잡도가 올라가는 현상이 발생 ex) 커스텀 뷰를 만드는데, ButtonWithImageView안에 또 다른 MyB..
Custom View 구현 시 프로토콜을 사용하면 좋은 이유 보통 커스텀 뷰를 구현하면 사용하는쪽에서 가져다 쓰는데, 사용하는곳이 여러곳이면 이 커스텀 뷰를 수정할때 여러곳을 고려해야하여 수정이 어려움이 존재 프로토콜을 사용한다면? 구현체의 의존성을 사용하는쪽에 두지 않는것이 가장 큰 의미, DIP(Dependency Inversion Principle) 사용하는쪽에서는 Interface에만 의존하고 있기 때문에 구현체에 여러가지 변화를 주더라도 유연한 구조 유지가 가능 ex) 커스텀 뷰가 공통 뷰이고 이 뷰가 Swift에서 SwiftUI로 넘어갈 때 역시도 protocol로만 외부에게 노출했으면 유연하게 수정이 가능 protocol로 커스텀 뷰 구현하기 커스텀 버튼을 만든다고 했을 때, UIView로 ..
DispatchQueue.main 및 스레드 동작 개념 * 이전 포스팅 글 참고 기본 상식) UI코드와 main thread UI 코드를 초기화하거나 접근할 때 main thread가 아니면 Xcode에서 디버그 모드에서 crash를 내주며 개발자에게 main thread에서 호출하도록 유도 주의할점은 뷰를 초기화 할 때도 main thread에서 수행이 필수 ex) 뷰를 background thread에서 수행하면 Xcode에서 에러 발생 커스텀 뷰에서의 DispatchQueue.main 사용 시 주의사항 보통 커스텀 뷰를 구현할 때, 뷰 내부 코드에 DispatchQueue.main을 넣는 경우가 존재 (외부에서 해당 뷰를 사용할 때 어차피 DispatchQueue.main으로 불러야하니 커스텀 뷰에..
커스텀 뷰에서 뷰를 터치해도 키보드가 올라게 하는 방법 커스텀 뷰 터치 이벤트 바인딩에서 UITextField에 접근하여 becomeFirstResponder()를 호출해줄 수 있지만 커스텀 뷰를 사용할땐 UI요소가 private이 되어야 응집도가 높아지므로 다른 방법 사용 CustomView에서 becomeFirstResponder(), resignFirstResponder()를 재정의하여 사용 // MyCustomView.swift @discardableResult override func becomeFirstResponder() -> Bool { super.becomeFirstResponder() return self.textField.becomeFirstResponder() } @discardab..
Custom View (xib) 기본 개념 custom view 인스턴스를 사용하기까지의 개념 이해 xib -> nib -> instance (아래 구현부에서 계속 상세히 설명) instance는 UIView를 상속한 커스텀 뷰를 만들때 필요하고, UITableViewCell과 같은 커스텀 셀에서는 불필요 > tableView.register(nib, forCellReuseIdentifier:)할 때 nib파일을 넣어주므로 커스텀 셀에서는 불필요 Custom Cell 준비 Cocoa Touch Class로 UITableViewCell 생성 cf) cell이 아닌 일반적인 view를 만들때는 .swift파일과 .xib파일 생성 주의) UITableViewCell을 아래처럼 swift, views 파일 따로..
.xib파일과 .swift파일 생성 // // MyView.swift // TestSwfit // // Created by 김종권 on 2020/11/01. // Copyright © 2020 jongkwon kim. All rights reserved. // import Foundation import UIKit @IBDesignable class MyView: UIView { } .xib파일에서 UI기본 설정 (초기화면) FIle's Owner에 클래스 정의 Safe Area 체크 해제 Size를 Freeform으로 설정 드래그하여 크기 조절 후 디자인 커스텀 (하단의 검은색 bar는 다른 파일 클릭한 다음 다시 이 파일 클릭하면 사라짐) MyView.swift 코드 작성 xib, nib 파일 개념 ..