모바일앱/iOS
autologin
GeekCode
2022. 1. 10. 22:00
반응형
btn_box.setBackgroundImage(UIImage(named: "box"), for: .normal)
btn_box.setBackgroundImage(UIImage(named: "checkBox"), for: .selected)
1. Button으로 체크박스 흉내내기
안드로이드에서는 따로 CheckBox라는 widget이 제공되어 편리했는데 xcode에서는 checkbox는 없고 button밖에 안보인다..
찾아보니 button을 커스텀하여 만들어야하는데 stackoverflow에서 조금 간단히 체크박스같은 버튼을 만들 수 있는 방법을 제시했다 (https://stackoverflow.com/questions/41344895/the-best-way-to-use-checkbox-ios-swift)
- StoryBoard에서 설정하기
- StoryBoard의 Button을 클릭한 후 Attribute inspector 메뉴로 이동
- State Config > selected로 변경한 후 image항목에 적절한 이미지를 삽입한다
- State Config > default로 변경한 후 이미지를 넣거나 배경 색상을 변경하는 식으로 버튼을 표시한다
- 코드로 설정하기
btn_box.setBackgroundImage(UIImage(named: "box"), for: .normal)
btn_box.setBackgroundImage(UIImage(named: "checkBox"), for: .selected)
- 버튼 클릭 시 선택된 상태 가져오기
- 아래 코드는 storyboard와 viewcontroller에서 button을 연결한다
-
@IBAction func autoLoginAction(_ sender: UIButton) { // auto login 선택 여부 sender.isSelected = !sender.isSelected if sender.isSelected == true{ isAutoLogin = true }else{ isAutoLogin = false } }
2. auto login 버튼 체크 후 로그인 성공 시 id, pwd 저장하기 (UserDefaults 사용)
로그인에 성공한 id와 pwd를 저장해야하기 때문에 디바이스에 간단한 정보를 저장할 수 있는 UserDefaults를 사용하게 되었다
이 클래스는 안드로이드에서 SharedPreference와 비슷하다고 볼 수 있다
- standard : Returns the shared defaults object. (공유할 기본 객체 리턴)
- 데이터를 저장할 때는 func set(Any?, forKey: String)
- 데이터를 가져올 때는 func data_type(forKey: String) 함수를 사용한다
- auto login버튼이 체크된 상태에서 로그인까지 성공했다면 아이디와 비밀번호를 저장하도록 한다
- 자동로그인을 위해 UserDefaults에 저장된 값 가져오기
- id 키 값에 값이 있는 경우 전역변수 uid에 저장하여 parameter로 넘긴다 ()
- id 키 값에 값이 있는 경우 전역변수 uid에 저장하여 parameter로 넘긴다 ()
// UserDefaults에 값이 있는 경우 가져와서 parameter로 넘김
if let userId = UserDefaults.standard.string(forKey: "id"){
self.uid = userId
self.pwd = UserDefaults.standard.string(forKey: "pwd")!
}
3. Logout 버튼 클릭 시 로그인화면 이동 & 저장된 id, pwd 삭제
@IBAction func logoutActionButton(_ sender: Any) {
print("delete id, pwd")
UserDefaults.standard.removeObject(forKey: "id")
UserDefaults.standard.removeObject(forKey: "pwd")
}
4. App 완전 종료 후 다시 켰을 때 바로 리스트 화면으로 이동하기
- 마지막 단계, App을 완전 종료한 후 저장된 데이터를 가지고 로그인화면에서 다음화면으로 바로 이동하는 부분은 위에서 봤던 parameter로 uid와 pwd를 넘기는 과정과 유사하다
- 화면이 로드됨과 동시에 확인하는 과정이 필요하므로 viewDidLoad()함수에 작성한다
- id키 값이 있는 경우 로그인 콜백 메소드를 실행한다
- getLogin() 함수에는 화면 전환을 위한 소스가 있다참고 : http://hyesunzzang.tistory.com/49
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // 값이 저장되어있다면 자동 로그인 if let userId = UserDefaults.standard.string(forKey: "id"){ getUserData { (success, response, error) in self.getLogin(success: success, response: response, error: error) } } }
- 지난번 HTTP 통신 예제에서는 loginAction에 데이터를 파싱하여 로그인 성공 시 화면 전환하는 소스를 통째로 넣었었다
- 이번에 자동로그인을 하면서 viewDidLoad()안에도 긴 소스를 넣었는데 두 소스가 동일한 기능을 하기 때문에 따로 함수로 묶어두었다(getLogin())
완성!
출처: https://hyesunzzang.tistory.com/50 [dev.ssun]
반응형