게시글 작성 화면에 다음 기능들을 구현했다:
private func createTagButton(title: String) -> UIButton {
let button = UIButton()
button.titleLabel?.font = .systemFont(ofSize: 14) // 폰트 크기 14로 조정
// ... 나머지 설정
return button
}
@objc private func testButtonTapped() {
let testVC = TestPostVC()
if let navigationController = self.navigationController {
navigationController.pushViewController(testVC, animated: true)
} else {
let navController = UINavigationController(rootViewController: testVC)
navController.modalPresentationStyle = .fullScreen
present(navController, animated: true)
}
}
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupNavigationBar()
if let post = post {
DispatchQueue.main.async { [weak self] in
self?.setupData()
}
}
}
struct TestPost: Codable {
let createdDate: Timestamp?
let nickName: String
let positionSearch: String // "구인" 또는 "구직"
let position: String // 직무
let availableTime: String // 가능 시간
let techstack: [String] // 기술 스택 배열
let urgencyLevel: String // 시급성
let specificity: String // 아이디어상황
let recruits: String // 모집 인원
let meeting: String // 협업방식
let experience: String // 경험
let title: String // 제목
let detail: String // 상세 내용
var asDictionary: [String: Any] {
return [
"createdDate": FieldValue.serverTimestamp(),
"nickName": nickName,
"positionSearch": positionSearch,
"position": position,
"availableTime": availableTime,
"techstack": techstack,
"urgencyLevel": urgencyLevel,
"specificity": specificity,
"recruits": recruits,
"meeting": meeting,
"experience": experience,
"title": title,
"detail": detail
]
}
}
NavigationController 설정의 중요성
데이터 전달 시점과 UI 업데이트 타이밍 관리
SnapKit을 활용한 레이아웃 구성
Firebase 데이터 모델 설계
UIStackView를 활용한 태그 버튼 구현
이번 프로젝트를 통해 iOS 앱에서 Firebase를 활용한 데이터 관리와 UI 구현에 대한 실제적인 경험을 얻을 수 있었다. 특히 NavigationController를 통한 화면 전환과 데이터 전달 과정에서 발생할 수 있는 문제점들을 파악하고 해결하는 방법을 학습했다.
향후에는 위에서 언급한 개선사항들을 반영하여 더 안정적이고 사용자 친화적인 앱을 구현할 계획이다. 특히 에러 처리와 성능 최적화에 중점을 두어 개선해 나갈 예정이다.