아삭아삭 iOS 개발

[TIL] 2022.07.16~17 (SeSAC iOS) 본문

TIL(Today I Learned)

[TIL] 2022.07.16~17 (SeSAC iOS)

바닐라머스크 2022. 7. 17. 23:50

 

오늘 공부한 내용들을 내가 잊지 않기 위해 기록합니다.

틀린 내용이 있을 수 있는 점 참고 부탁드립니다 :)

 

■ 주말 과제

  • 넷플릭스 로그인 화면에서 조건에 따라 얼럿을 띄워보는 것
  • 넷플릭스 로그인 화면에서 화면 전환 구현해보기

alert, 화면전환

1) alert 생성

    // MARK: 취소와 확인이 뜨는 UIAlertController
    func presentAlert(title: String, message: String? = nil,
                      isCancelActionIncluded: Bool = false,
                      preferredStyle style: UIAlertController.Style = .alert,
                      handler: ((UIAlertAction) -> Void)? = nil) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: style)
        let actionDone = UIAlertAction(title: "확인", style: .default, handler: handler)
        alert.addAction(actionDone)
        if isCancelActionIncluded {
            let actionCancel = UIAlertAction(title: "취소", style: .cancel, handler: nil)
            alert.addAction(actionCancel)
        }
        self.present(alert, animated: true, completion: nil)
    }
    
    // MARK: - 확인만 뜨는 UIAlertController
    func signupAlert(title: String, message: String? = nil, preferredStyle style: UIAlertController.Style = .alert,
                     handler: ((UIAlertAction) -> Void)? = nil) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: style)
        let ok = UIAlertAction(title: "확인", style: .default, handler: handler)
        
        alert.addAction(ok)
        self.present(alert, animated: true)
    }

2) 로그인 시도시 조건에 따른 alert창 구현

    // MARK: - 회원가입 버튼 클릭시 액션
    @IBAction func signUpButtonTapped(_ sender: UIButton) {
        if emailTextField.text == "" || passwordTextField.text == "" {
            self.presentAlert(title: "이메일과 비밀번호를 모두 입력해주세요.")
            return
        } else if passwordTextField.text!.count < 6 {
            self.presentAlert(title: "비밀번호는 6자리 이상으로 설정해주세요.")
            return
        }
        self.signupAlert(title: "<안내>", message: "회원가입이 성공적으로 완료되었습니다 :)", preferredStyle: .alert) {_ in
            self.view.endEditing(true)
            self.moveToMain()
        }
    }

3) (추가) 라이브러리 적용해보기
TextFieldEffects : Hoshi class 적용 후, border 활성화 색상에 red 적용

IQKeyboardManager : AppDelegate에 import해준 후, 키보드에 텍스트필드가 가려졌을때 텍스트필드 높이만큼 올라갔다 내려오게 함

import IQKeyboardManagerSwift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    IQKeyboardManager.shared.enable = true
        
    return true
}

 

4) 로그인 성공시, 코드를 통해 present 방식으로 화면전환 구현되도록 적용

    @IBAction func signUpButtonTapped(_ sender: UIButton) {
        if emailTextField.text == "" || passwordTextField.text == "" {
            //
            생략
            //
        self.signupAlert(title: "<안내>", message: "회원가입이 성공적으로 완료되었습니다 :)", preferredStyle: .alert) {_ in
            self.view.endEditing(true)
            self.moveToMain()
        }
    }
    
    // 화면이동
    func moveToMain() {
        let newVC = self.storyboard?.instantiateViewController(identifier: "HomeViewController")
        newVC?.modalTransitionStyle = .crossDissolve
        newVC?.modalPresentationStyle = .fullScreen
        self.present(newVC!, animated: true, completion: nil)
    }

 

  • 기념일 계산기 앱에서 설정한 Date를 저장해보는 것

navigationBar, userDefaults, alert 적용

1) [Save] 클릭시 계산된 기념일 일자를 저장하고, 저장완료 알림창 생성하기
- 금요일날 UserDefaults 처음 사용해보았을 때보다는 수월하게 적용했다.
- 계산된 일자 4개를 저장해주므로 각 라벨의 tag값을 활용한 for 반복문과 함께 적용했다.

    let defaults = UserDefaults.standard

    // MARK: - 계산된 기념일 저장하기
    @IBAction func saveButtonTapped(_ sender: UIButton) {
        saveData() // 저장하기
        saveAlert() // 저장 알림창 띄우기
    }
    
    // 저장하기
    func saveData() {
        for resultDate in anniversaryDateLabels {
            let date = self.anniversaryDateLabels[resultDate.tag].text
            defaults.set(date, forKey: "date\(resultDate.tag)")
        }
    }
    
    // 저장 알림창 띄우기
    func saveAlert() {
        let saveAlert = UIAlertController(title: "<알림>", message: "기념일이 저장되었습니다.", preferredStyle: .alert)
        let ok = UIAlertAction(title: "확인", style: .destructive, handler: nil)
        saveAlert.addAction(ok)
        present(saveAlert, animated: true, completion: nil)
    }

2) [Reset] 클릭시 저장된 기념일 일자를 삭제하고, 초기화 완료 알림창 생성하기

- 초기화 버튼을 클릭하면 저장된 데이터를 모두 삭제해주고, 초기화된 현상태를 가져와서 저장해주었다.
- 그러고나서 라벨에 뭘 표시해둘까 하다가 (datePickerValueChanged 전까지는) "Happy Day"로 출력하기로 해뒀다.

    // MARK: - 저장된 기념일 데이터 초기화하기
    @IBAction func resetButtonTapped(_ sender: UIButton) {
        resetData() // 초기화하기
        resetAlert() // 초기화 성공 알림창 띄우기
    }
  
    // 초기화하기
    func resetData() {
        for resultDate in anniversaryDateLabels {
            // 삭제하고
            defaults.removeObject(forKey: "date\(resultDate.tag)")
            
            // 삭제한 상태를 가져와서 저장하고
            let currentValue = defaults.string(forKey: "date\(resultDate.tag)")
            defaults.set(currentValue, forKey: "date\(resultDate.tag)")
            
            // 전체 감정숫자 출력
            resultDate.text = "Happy Day"
        }
    }
    
    // 초기화 성공 알림창 띄우기
    func resetAlert() {
        let resetAlert = UIAlertController(title: "<알림>", message: "기념일 정보가 초기화되었습니다.", preferredStyle: .alert)
        let ok = UIAlertAction(title: "확인", style: .destructive, handler: nil)
        resetAlert.addAction(ok)
        present(resetAlert, animated: true, completion: nil)
    }

3) (추가) Navigation Bar 적용해보기
- 앱 상단이 휑해보여서  Navigation Bar 를 적용하고 title 문구와 색상을 아래와 같이 코드로 구현해보았다.

    func setNavigationTitle() {
        navigationController?.navigationBar.topItem?.title = "What a Day!"
        navigationController?.navigationBar.scrollEdgeAppearance?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    }

4) (추가) 라이브러리 적용해보기

- SideMenu : 수업시간에 사용해봤던 라이브러리를 사용해보고 싶어서 side bar를 생성해보았다.
- Navigation Controller를 스토리보드에 추가하고, side menu class를 적용했다.
- 기존 메인화면의 navigation bar 좌측에 bar button item 하나를 추가해서 Side Menu Navigation Controller에 segue를 modally present로 연결해주었다.
- 시뮬레이터 구현시 사이드 메뉴가 열리는 것 까지만 구현해보았는데, 추후 tableview를 사용한 메뉴화면도 만들어봐야지


  • 감정일기 카운트를 리셋해보는 것 (userDefault) (7/15 완료)
  • 2주간 수업내용 복습

 

'TIL(Today I Learned)' 카테고리의 다른 글

[TIL] 2022.07.19 (SeSAC iOS)  (0) 2022.07.19
[TIL] 2022.07.18 (SeSAC iOS)  (0) 2022.07.18
[TIL] 2022.07.15 (SeSAC iOS)  (0) 2022.07.15
[TIL] 2022.07.14 (SeSAC iOS)  (0) 2022.07.14
[TIL] 2022.07.13 (SeSAC iOS)  (0) 2022.07.13