본문 바로가기
728x90
SMALL

UIKIT149

❓backgroundColor와 contentView.backgroundColor의 차이 1. backgroundColorUITableViewCell 자체의 배경색을 설정.셀의 바깥쪽 전체 배경색을 담당.contentView가 차지하지 않는 영역(즉, 셀과 셀 사이의 간격이나 inset으로 인해 생긴 공간)에 영향을 줌. 2. contentView.backgroundColor셀의 **내용이 들어가는 부분(contentView)**의 배경색을 설정.UITableViewCell은 contentView라는 서브뷰를 기본적으로 가지고 있으며, 모든 UI 요소는 여기에 추가되는 게 일반적.contentView.layer.cornerRadius = 10 같은 설정이 이 영역에만 적용됨.override init(style: UITableViewCell.CellStyle, reuseIdentifier: S.. 2025. 3. 21.
🤔 테이블 셀에 별도의 UITableViewCell을 만들지 않는다면? // ✅ 기본 UITableViewCell 등록 addItemTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")// MARK: - Extension: 테이블 델리게이트 설정extension AddPlanViewController: UITableViewDelegate, UITableViewDataSource { ... // ✅ 각 셀을 별도로 만들지 않음 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { switch AddItemTableSectio.. 2025. 3. 18.
✅ 저장한 커스텀 폰트 확인하는 메서드 📌 설치된 모든 폰트 출력하기func printAllFonts() { for family in UIFont.familyNames { print("Font Family: \(family)") for fontName in UIFont.fontNames(forFamilyName: family) { print(" - \(fontName)") } }}  📌 사용 방법:viewDidLoad()에 printAllFonts()를 호출override func viewDidLoad() { super.viewDidLoad() printAllFonts()}// 출력 결과....Font Family: Times New Roman - TimesNe.. 2025. 3. 18.
❌ 복수 선택할 수 있지만.. 해제는 자동으로 안되요 https://explorer89.tistory.com/389 ❓ UICalendarSelectionMultiDate에서 특정 조건에서 선택을 막기! (UI 표시 X)❓시작일, 종료일을 선택 한 후에, 다른 날짜 선택을 막을 수 있나? (UI 표시 안되게) 🚨 결론: UICalendarSelectionMultiDate에서는 선택을 즉시 해제할 방법이 없음.즉, 세 번째 날짜를 선택했을 때, UI에explorer89.tistory.com 2025. 3. 17.
🤔 UITableView의 grouped 스타일에서 섹션 간 간격을 늘리는 방법 ❌ 현재 섹션간의 간격을 늘리고자 아래와 같이 했으나.. 적용안됨 일정표 섹션과 진행 중인 계획 섹션 간의 간격이 늘어나지 않음..extension HomeViewController: UITableViewDelegate, UITableViewDataSource { ... // ✅ 섹션 높이 설정 func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 30 // 섹션 간 간격 }}  🔨 해결 방법heightForFooterInSection을 사용해서 섹션 간 간격을 늘리는 건 일반적으로 맞는 방법하지만 UITableView의 grouped 스.. 2025. 3. 16.
🤔 CalendarViewDeleage를 사용하여 특정 날짜에 대한 데코레이션! CalendarViewController에서 CalendarViewDelegate를 사용하여 특정 날짜에 대한 데코레이션을 적용하려면, CalendarViewDelegate의 인스턴스를 생성하고 calendarView.delegate로 설정import UIKit// Define a calendar view delegate.class CalendarViewDelegate: NSObject, UICalendarViewDelegate { var decorations: [Date?: UICalendarView.Decoration] = [:] override init() { super.init() setupDecorations() } privat.. 2025. 3. 14.
🤔 UICalendar 만들어보기 (오늘 날짜 표시) https://developer.apple.com/documentation/uikit/uicalendarview UICalendarView | Apple Developer DocumentationA view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.developer.apple.com 📌 설정 및 사용법CalenadarViewController 클래스는 iOS 16 이상에서 제공하는 UICalendarView를 사용하여 캘린더를 표시하는 기능을 합니다. class CalenadarViewController: UIViewCont.. 2025. 3. 14.
🌈 텍스트 필드가 키보드가 가린다면? 키보드가 나타날 때, reviewTitleTextField가 가려지는 경우→ 뷰 전체를 키보드 높이만큼 올렸다가, 키보드가 사라지면 원래 위치로 복귀하도록 처리해야 합니다. ✈️ 전체 코드class ViewController: UIViewController { @IBOutlet weak var textView: UITextView! @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. setupKeyboardNotifications() .. 2025. 3. 12.
🔍 Firebase Storage listAll(completion:) 설명 https://explorer89.tistory.com/380 🔥 Firebase의 Storage 내에 저장된 여러 이미지 삭제하기!https://firebase.google.com/docs/storage/ios/delete-files?hl=ko Apple 플랫폼에서 Cloud Storage로 파일 삭제  |  Cloud Storage for Firebase4월 9~11일, Cloud Next에서 Firebase가 돌아옵니다. 지금 등록하기 의견 보내기 Apple 플explorer89.tistory.com 🔍 Firebase Storage listAll(completion:) 설명🔹 기능listAll(completion:)은 Firebase Storage에서 특정 경로 아래의 모든 파일(items).. 2025. 3. 12.
🤔 Completion Handler를 Combine으로 변경할 때 고려해야 할 점? 🤔 Firebase 에서 제공되는 기본 코드는 Completion Handler 기반... 이를 Combine으로 바꾸려면? 🎯 Combine 변환 시 고려해야 할 사항1️⃣ Future는 한 번만 실행되는 Publisher→ 비동기 작업이 여러 번 실행되면 PassthroughSubject나 CurrentValueSubject가 더 적절할 수도 있음.2️⃣ 비동기 요청 순서 보장→ listAll()이 완료되기 전에 delete()를 실행하지 않도록 해야 함.→ flatMap()과 collect() 또는 DispatchGroup을 사용하여 비동기 흐름을 제어.3️⃣ UI 업데이트는 receive(on: DispatchQueue.main)을 사용하여 Main Thread에서 실행→ listAll()과 .. 2025. 3. 12.
🔥 Firebase의 Storage 내에 저장된 여러 이미지 삭제하기! https://firebase.google.com/docs/storage/ios/delete-files?hl=ko Apple 플랫폼에서 Cloud Storage로 파일 삭제  |  Cloud Storage for Firebase4월 9~11일, Cloud Next에서 Firebase가 돌아옵니다. 지금 등록하기 의견 보내기 Apple 플랫폼에서 Cloud Storage로 파일 삭제 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하firebase.google.comhttps://firebase.google.com/docs/storage/ios/list-files?hl=ko Apple 플랫폼에서 Cloud Storage로 파일 나열  |  Cloud Storage for Firebas.. 2025. 3. 12.
🔥 Firebase Storage에 이미지 업로드, 이미지 주소 URL 가져오기 func uploadAvatar() { let userID = Auth.auth().currentUser?.uid ?? "" // ✅ 유저 ID 가져오기 guard let imageData = imageData?.jpegData(compressionQuality: 0.5) else { return } // ✅ 이미지 데이터 변환 let metaData = StorageMetadata() // Firebase Storage 메타데이터 생성 metaData.contentType = "image/jpeg" // ✅ 파일 타입 설정 StorageManager.shared.uploadProfilePhoto(with: userID, image: imageData, metaData: met.. 2025. 2. 28.
📍 Firebase 의 Storage 에 사진 업로드하는 방법 ✅ Firebase 의 Storage 에 저장하는 메서드images/{userID}/profileImage/profileImage_{userID}.jpg 경로를 사용해서 사용자별로 폴더를 구분나중에 리뷰 이미지 등 다른 카테고리를 추가할 확장성도 고려이 메서드는 Firebase Storage에 사용자의 프로필 이미지를 업로드하는 기능을 수행import Foundationimport FirebaseAuthimport FirebaseStorageimport FirebaseStorageCombineSwiftimport Combinefinal class StorageManager { // MARK: - Variable static let shared = StorageManager() .. 2025. 2. 28.
❓ FireStore 내에 회원정보를 불러오는 데 왜 tryMap? 🔥 tryMap { try $0.data(as: MovieClipUser.self) }의 역할 func collectionUsers(retrieve id: String) -> AnyPublisher { db.collection(userPath) .document(id) .getDocument() .tryMap { try $0.data(as: MovieClipUser.self) } // 🔥 여기가 핵심 .eraseToAnyPublisher()}🔹 각 단계별 동작1️⃣ db.collection(userPath).document(id).getDocument()Firestore에서 특정 문서(Document)를 가져오는 비동기 작업반환 타입: AnyP.. 2025. 2. 27.
❓ Firebase 로그인 메서드 내 map의 역할 ✅ map(\.user)의 역할func loginUser(with email: String, password: String) -> AnyPublisher { return Auth.auth().signIn(withEmail: email, password: password) .map(\.user) // ✅ 여기서 map이 동작 .eraseToAnyPublisher()} 🔹 Firebase의 signIn(withEmail:password:)가 반환하는 타입➡️ signIn은 AnyPublisher를 반환해.➡️ 즉, AuthDataResult라는 객체가 반환되는데, 우리는 여기서 User 객체만 필요해.func signIn(withEmail email: String, .. 2025. 2. 27.
728x90
LIST