전체 글

성장하는 공공돌 블로그🧸 💻
트러블 슈팅

자식 컨트롤러 누락으로 인한 이벤트 미작동

문제 상황Rx 바인딩도 정상적으로 되어 있고, 버튼 액션도 설정했지만, 버튼을 눌러도 로그가 찍히지 않고 이미지도 변경되지 않음.특히 setChecked(_: Bool)이나 @objc 메서드들이 호출되지 않는 상태.원인 분석해당 체크박스가 포함된 InfoRowView는 WorkingConditionsContainerViewController의 view에 존재함.하지만 최종 부모 컨트롤러에서 해당 VC를 자식 뷰컨트롤러로 등록하지 않고 view만 addSubview() 하여 붙였음.이로 인해 viewDidLoad()가 호출되지 않았고, 내부에서 설정된 Rx 바인딩 및 addTarget 등의 액션 로직이 실행되지 않음.해결 방법WorkingConditionsContainerViewController를 자식 ..

트러블 슈팅

체크박스를 클릭해도 이미지가 바뀌지 않음

문제 상황checkBox.isSelected = isChecked 호출이 동작하지 않음.로그도 찍히지 않음.원인 분석setChecked(_:)는 호출되었지만, 해당 메서드가 뷰 계층이 제대로 올라가지 않은 상태에서 동작하고 있었음.또한 버튼에 target-action이 제대로 설정되지 않았음.해결 방법checkBox.addTarget(_:action:for:)는 뷰 외부(컨트롤러 또는 초기화 시점)에서 설정InfoRowView 내에서 .checkBox 타입일 경우에만 touchUpInside 설정타겟 등록 이후 setChecked(_:) 호출로 UI 갱신// MARK: - setStyles func setStyles(type: InfoRowType) { switch type { ..

iOS

[ iOS ] Apple 로그인 클라이언트 구현 (UIKit + Rx + Clean Architecture)

이 글은 UIKit 기반 앱에서 Apple 로그인을 구현하는 전 과정을 다룹니다.RxSwift, MVVM, 클린 아키텍처, 서버 연동을 기준으로 작성되었습니다.1. Apple Developer 계정 로그인https://developer.apple.com/account 로그인 - Apple idmsa.apple.com 2. App ID 생성 (식별자)좌측 메뉴 → Certificates, IDs & Profiles → Identifiers+ 버튼 클릭 → App IDs → App 선택Description: 앱 이름 입력Bundle ID: Xcode에서 사용하는 것과 정확히 일치하도록 입력 (예: com.example.app)Capabilities에서 Sign In with Apple 체크Continue →..

트러블 슈팅

AutoLayout - 화면 겹침 현상 (StackView 내 CustomView 겹침)

문제 상황 UIStackView 내부에 WorkplaceContainerView, PayContainerView를 배치했음에도 불구하고, 두 뷰가 겹쳐서 출력되는 현상이 발생내부 요소들이 정상적으로 구성되었음에도 StackView가 자식 뷰의 높이를 인식하지 못해 UI가 깨짐원인 분석UIStackView는 자식 뷰의 명시적인 높이 제약 또는 intrinsic content size가 없는 경우, 뷰의 높이를 0으로 인식함WorkplaceContainerView와 PayContainerView 모두 내부에 UI를 배치한 container 뷰만 있고, 해당 뷰의 하단 요소를 기준으로 전체 높이를 계산하는 제약이 빠져있었음distribution을 .equalSpacing으로 설정한 것도 자식 뷰 간의 간격 계..

트러블 슈팅

NSAttributedString - 적용 순서로 인해 강조 색상이 반영되지 않음

문제 상황UILabel에서 "근무지 *"와 같이 특정 문자를 강조하려 했으나 에 적용한 색상이 반영되지 않음NSMutableAttributedString을 사용했음에도 불구하고 문자가 회색(gray900)으로 표시되어 의도한 빨간색(accent)이 보이지 않는 문제 발생원인 분석NSMutableAttributedString은 속성을 덮어쓰기 방식으로 적용됨전체 문자열에 .foregroundColor = gray900를 마지막에 적용하면서,앞서 설정한 *에 대한 빨간색 설정이 덮어써져 무효화됨해결방안기본 스타일(전체 폰트 및 색상)은 먼저 설정하고특정 부분 강조()는 가장 마지막에 스타일을 적용하도록 순서 조정private let workplaceTitle = UILabel().then { let f..

iOS/Design Pattern

[ Coordinator ] Coordinator 패턴이란?

Coordinator 패턴이란?코디네이터(Coordinator) 패턴은 iOS 앱에서 ViewController의 "화면 전환" 책임을 분리하여, 별도의 객체인 코디네이터가 화면 흐름과 네비게이션을 관리하도록 하는 디자인 패턴이다.이 패턴의 핵심 목적은 ViewController의 역할을 단순화하고, 화면 간 전환에 따른 결합도를 낮추는 것이 목적이다.왜 코디네이터 패턴이 필요할까?Coordinator 객체는 화면 전환(네비게이션)과 관련된 모든 로직을 담당하게 되는데 ViewController는 더 이상 다른 ViewController를 직접 생성하거나, 네비게이션을 직접 수행하지 않는다.ViewController는 단지 자신의 코디네이터에게 "다음 화면으로 이동해달라"고 요청만 할 뿐이다. Coord..

Sheep1sik
공공돌