1. 처음 회원가입 후 진입시에 API가 동작하지 않는 현상
- 원인 : API에 사용되는 헤더(jwt값)가 'static' 즉 정적변수이기때문에 프로그램 처음 실행할 때 한 번 값이 할당된 이후에는 값이 바뀌지 않음
reference : https://wikidocs.net/228
- 해결 : 앱 실행 후에 회원탈퇴 후 재가입 혹은 기타 계정으로 로그인하는 경우까지 고려해야하므로 정적이 아닌 동적 변수로 선언 후 동적으로 값 할당
2. 텍스트필드가 키보드에 의해 가려지는 현상
- 해결 1 : 빈 곳을 누르면 키보드가 내려가게 처리해야함
func dismissKeyboardWhenTappedAround() {
let tap =
UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
// tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(false)
}
- 해결 2 : 키보드를 입력할 때 텍스트필드도 같이 올라가게 처리
reference : https://developer-fury.tistory.com/22
override func viewDidLoad() {
... 위 생략
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc
func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
chatBackGround.frame.origin.y -= keyboardHeight
}
}
@objc
func keyboardWillHide(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
chatBackGround.frame.origin.y += keyboardHeight
}
}
3. 위와같이 처리하였는데, 텍스트필드에서 입력하면 입력창이 사라지는 현상 (해결중)
- 현상 : 입력하지 않은 상태로 빈 공간을 터치했다가 textView에 포커스를 더하면 문제가 없는데, 입력할 때에 textView가 갑자기 사라짐 (화면 아래쪽으로 사라지는것처럼 보임)
- textViewDidChange에서, button의 이미지를 바꾸는 부분을 주석처리하니 해당 현상이 사라지는것으로 보아 이미지를 setting하는 곳에서 문제가 있는 것으로 보임
4. 출석 관리하기/확인하기 화면에 누르면 화면이 여러번 이동하는 이슈
Problem : cell의 버튼이 클릭되었을 때, 여러 셀에게 인식이 되어 여러번 실행하는 것으로 짐작
cell.manageButton.rx.tapGesture()
.when(.recognized)
.map { _ in
return indexPath.row
}
.bind(to: self.viewModel.inputs.manageAttendance) // indexPath.row 넘겨주기 -> 작성한 글 인덱스
.disposed(by: disposeBag)
reference :
disposeBag을 cell의 disposebag을 사용하여 dispose 시키는 방향으로 수정
cell.manageButton.rx.tapGesture()
.when(.recognized)
.map { _ in
return indexPath.row
}
.bind(to: self.viewModel.inputs.manageAttendance) // indexPath.row 넘겨주기 -> 작성한 글 인덱스
.disposed(by: cell.disposeBag)
5. cell의 data가 섞이는 현상 (ex. 첫번째 글을 눌렀는데 세번째 글로 이동)
- 이유 : API를 불러올 때 순서와 작성한 글 리스트 순서가 서로 맞지 않아 다른 글이 불러와지는 현상
- Problem : 작성한 글은 API에서 불러오는 순서와는 달리 모임 시간이 최신 순으로 되어있기 때문에, indexPath.row와 불일치하였음.
- Solve : indexPath.row는 그대로 받되 이동하는 화면에서 API 에서 불러오는 글을 모임 시간 최신순으로 글을 정렬하여, 해당 인덱스로 접근
if response.isSuccess {
let sortedResult = response.result?.myPosting?.sorted(by: { $0.gatheringTime! > $1.gatheringTime! })
viewController.didSuccessGetManageAttendance(myPosting: sortedResult ?? [])
} else {
viewController.failedToRequest(message: response.message)
}
... 이후 생략