일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 함수
- RawValue
- TableView
- 패스트캠퍼스
- 문자열 보간법
- userDefaults
- swift
- cancelAsyncWrite
- 기본문법
- ios
- xcode
- switch
- Git
- 직장인자기계발
- beginAsyncWrite
- SeSAC
- Threading
- enum
- Realm
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- Background
- 인스펙터
- 직장인인강
- 패스트캠퍼스후기
- Optional Chaining
- 열거형
- 프로퍼티 관찰자
- 독학
- 패캠챌린지
- 옵셔널 체이닝
- Today
- Total
아삭아삭 iOS 개발
[TIL] 2022.07.16~17 (SeSAC iOS) 본문
오늘 공부한 내용들을 내가 잊지 않기 위해 기록합니다.
틀린 내용이 있을 수 있는 점 참고 부탁드립니다 :)
■ 주말 과제
- 넷플릭스 로그인 화면에서 조건에 따라 얼럿을 띄워보는 것
- 넷플릭스 로그인 화면에서 화면 전환 구현해보기
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를 저장해보는 것
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 |