[TIL] 10.18

Junyoung_Hong·2023년 10월 18일
0

TIL_10월

목록 보기
11/20
post-thumbnail

1. 카카오 비즈 앱 전환

계속해서 카카오 로그인에 관한 내용을 기록하고 있다. 마무리가 된 줄 알았지만, 큰 오류를 무시하고 있었다. 지금 Firebase의 이메일/비밀번호 로그인 방식까지 사용하고 있는데, Firebase의 이메일 부분에 들어가는 값이 카카오톡 로그인 사용자의 계정이라는 것이다. 이 부분이 왜 문제가 되냐면, 현재 동의항목에 사용자 계정은 필수가 아닌 선택 항목으로 들어가져 있기 때문이다.

이 상태에서 만약 사용자가 이메일 제공에 동의를 하지 않고 로그인을 진행하게 되면, 토큰은 발행이 되지만 이메일 값은 nil이 뜬다. 그래서 계정의 동의를 필수 동의로 바꾸고자 한다. 이를 위해서는 일반 앱에서 비즈 앱으로 변환이 필요하다.

전환하기 위해서는 앱 아이콘 등록을 필수로 해야한다는 알림이 뜬다. 앱 아이콘까지 등록을 한 다음에 전환을 하려고 하면 사업자 등록 번호를 입력하라는 알림이 뜰것이다. 아직 사업자 등록 번호가 없는 경우에는 카카오비즈니스 통합 서비스 약관 동의를 하면 된다.

https://devtalk.kakao.com/t/how-can-i-switch-to-a-biz-app-if-i-do-not-have-any-business-registration-number/71983

이렇게 전환을 하고, 다시 동의항목으로 가면 이메일도 필수 항목으로 설정할 수 있다.

2. 네비게이션 바 버튼 활성화/비활성화

CRUD를 기반으로 하는 앱에서는 사용자가 모든 항목에 내용을 넣었을 때, 완료버튼이 활성화 되는 흐름이 자연스럽다. 현재 프로젝트에서는 완료버튼이 네비게이션 바에 위치하고 있다. 활성화의 여부는 isEnabled 속성을 이용해서 설정할 수 있다.

게시판을 작성하는 페이지에서 진행을 하고자 한다. 게시판에는 제목과 내용이 필수이다. 현재 2가지의 TextView로 구현되어 있는 상태이다.

우선 viewDidLoad() 에서 버튼을 비활성화 시키자

self.navigationItem.rightBarButtonItem?.isEnabled = false

이제 내용이 있는지 없는지 확인 할 수 있는 변수를 만들자.

private var isTitleTextViewEdited = false
private var isContentTextViewEdited = false

앞에서 비활성화 관련 코드에서는 false라는 값을 입력했는데, 이제 isTitleTextViewEditedisContentTextViewEdited 에 따라서 달라지게 하면 된다.

self.navigationItem.rightBarButtonItem?.isEnabled = isTitleTextViewEdited && isContentTextViewEdited

각 TextView에 내용이 채워지면 변수들이 false에서 true로 바뀌면 된다. TextView의 text 색상이 black이고, text의 count가 0이 아니면 글씨가 있다고 판단을 한다.

// MARK: - TextView 관련
extension CreateNoticeBoardViewController: UITextViewDelegate {
    
    // 초기 호출
    func textViewDidBeginEditing(_ textView: UITextView) {
        
        // 제목 textView
        if textView == createNoticeBoardView.titleTextView {
            if createNoticeBoardView.titleTextView.textColor == UIColor(color: .placeholder) {
                
                createNoticeBoardView.titleTextView.text = nil
                createNoticeBoardView.titleTextView.textColor = UIColor.black
            }
        }
        
        // 내용 textView
        if textView == createNoticeBoardView.contentTextView {
            if createNoticeBoardView.contentTextView.textColor == UIColor(color: .placeholder) {
                
                createNoticeBoardView.contentTextView.text = nil
                createNoticeBoardView.contentTextView.textColor = UIColor.black
            }
        }
    }
    
    // 입력 시 호출
    func textViewDidChange(_ textView: UITextView) {
        
        // 제목 textView에 내용이 있는 경우
        if createNoticeBoardView.titleTextView.text.trimmingCharacters(in: .whitespacesAndNewlines).count != 0, createNoticeBoardView.titleTextView.textColor == UIColor.black {
            isTitleTextViewEdited = true
        }
        
        // 내용 textView에 내용이 있는 경우
        if createNoticeBoardView.contentTextView.text.trimmingCharacters(in: .whitespacesAndNewlines).count != 0, createNoticeBoardView.contentTextView.textColor == UIColor.black{
            isContentTextViewEdited = true
        }
        
        // 제목과 내용이 모두 있으면 "완료" 버튼 활성화
        self.navigationItem.rightBarButtonItem?.isEnabled = isTitleTextViewEdited && isContentTextViewEdited
    }
    
    // 입력 종료 시 호출
    func textViewDidEndEditing(_ textView: UITextView) {
        
        if createNoticeBoardView.titleTextView.text.isEmpty {
            createNoticeBoardView.titleTextView.text =  "제목을 입력하세요."
            createNoticeBoardView.titleTextView.textColor = UIColor(color: .placeholder)
        }
        
        if createNoticeBoardView.contentTextView.text.isEmpty {
            createNoticeBoardView.contentTextView.text =  "내용을 입력하세요."
            createNoticeBoardView.contentTextView.textColor = UIColor(color: .placeholder)
        }
    }
}
profile
iOS 개발자를 향해 성장 중

0개의 댓글