저번 게시물과 거의 똑같고 isUser로 중복 아이디를 확인하는 메소드 부분만 새로 추가
import UIKit
class joinView: UIViewController {
var userModel = UserModel() // 인스턴스 생성
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var passwordConfirmTextField: UITextField!
@IBOutlet weak var joinButton: UIButton!
// 회원 확인 method
func isUser(id: String) -> Bool {
for user in userModel.users {
if user.email == id {
return true // 이미 회원인 경우
}
}
return false
}
override func viewDidLoad() {
super.viewDidLoad()
// 키보드 내리기
nameTextField.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event.editingDidEndOnExit)
emailTextField.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event.editingDidEndOnExit)
passwordTextField.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event.editingDidEndOnExit)
passwordConfirmTextField.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event.editingDidEndOnExit)
joinButton.addTarget(self, action: #selector(didEndOnExit), for: UIControl.Event.editingDidEndOnExit)
}
@IBAction func didTapJoinButton(_ sender: Any) {
// 옵셔널 바인딩 & 예외 처리 : Textfield가 빈문자열이 아니고, nil이 아닐 때
guard let name = nameTextField.text, !name.isEmpty else { return }
guard let email = emailTextField.text, !email.isEmpty else { return }
guard let password = passwordTextField.text, !password.isEmpty else { return }
guard let passwordConfirm = passwordConfirmTextField.text, !passwordConfirm.isEmpty else { return }
if userModel.isValidEmail(id: email){
if let removable = self.view.viewWithTag(100) {
removable.removeFromSuperview()
}
}
else {
shakeTextField(textField: emailTextField)
let emailLabel = UILabel(frame: CGRect(x: 68, y: 350, width: 279, height: 45))
emailLabel.text = "이메일 형식을 확인해 주세요"
emailLabel.textColor = UIColor.red
emailLabel.tag = 100
self.view.addSubview(emailLabel)
} // 이메일 형식 오류
if userModel.isValidPassword(pwd: password){
if let removable = self.view.viewWithTag(101) {
removable.removeFromSuperview()
}
}
else{
shakeTextField(textField: passwordTextField)
let passwordLabel = UILabel(frame: CGRect(x: 68, y: 435, width: 279, height: 45))
passwordLabel.text = "비밀번호 형식을 확인해 주세요"
passwordLabel.textColor = UIColor.red
passwordLabel.tag = 101
self.view.addSubview(passwordLabel)
} // 비밀번호 형식 오류
if password == passwordConfirm {
if let removable = self.view.viewWithTag(102) {
removable.removeFromSuperview()
}
}
else {
shakeTextField(textField: passwordConfirmTextField)
let passwordConfirmLabel = UILabel(frame: CGRect(x: 68, y: 470, width: 279, height: 45))
passwordConfirmLabel.text = "비밀번호가 다릅니다."
passwordConfirmLabel.textColor = UIColor.red
passwordConfirmLabel.tag = 102
self.view.addSubview(passwordConfirmLabel)
}
if userModel.isValidEmail(id: email) && userModel.isValidPassword(pwd: password) && password == passwordConfirm {
let joinFail: Bool = isUser(id: email)
if joinFail {
print("이메일 중복")
shakeTextField(textField: emailTextField)
let joinFailLabel = UILabel(frame: CGRect(x: 68, y: 510, width: 279, height: 45))
joinFailLabel.text = "이미 가입된 이메일입니다."
joinFailLabel.textColor = UIColor.red
joinFailLabel.tag = 103
self.view.addSubview(joinFailLabel)
}
else {
print("가입 성공")
if let removable = self.view.viewWithTag(103) {
removable.removeFromSuperview()
}
self.performSegue(withIdentifier: "showMap", sender: self)
}
}
}
// TextField 흔들기 애니메이션
func shakeTextField(textField: UITextField) -> Void{
UIView.animate(withDuration: 0.2, animations: {
textField.frame.origin.x -= 10
}, completion: { _ in
UIView.animate(withDuration: 0.2, animations: {
textField.frame.origin.x += 20
}, completion: { _ in
UIView.animate(withDuration: 0.2, animations: {
textField.frame.origin.x -= 10
})
})
})
}
// 다음 누르면 입력창 넘어가기, 완료 누르면 키보드 내려가기
@objc func didEndOnExit(_ sender: UITextField) {
if nameTextField.isFirstResponder {
emailTextField.becomeFirstResponder()
}
else if emailTextField.isFirstResponder {
passwordTextField.becomeFirstResponder()
}
else if passwordTextField.isFirstResponder {
passwordConfirmTextField.becomeFirstResponder()
}
}
}
안녕하세요 혹시 이 댓글을 보실지 모르겠지만 궁금한게 있어서 댓글달아요 저거까진 구현을 했는데 혹시 SceneDelegate 에서 연결하는 코드도 좀 알수 있을까요? 실행하고 버튼을 누르면 Thread 1: "-[storyboardtest.LoginViewController goLogin:]: unrecognized selector sent to instance 0x102e0b220" 라는 오류가 뜨는데 혹시 이유좀 알수 있을까요?