@@ -63,7 +63,10 @@ final class ReportRegistrationViewController: BaseViewController<ReportRegistrat
6363 private let photoCollectionView = UICollectionView ( frame: . zero, collectionViewLayout: . init( ) )
6464 private let categoryTextView = ReportTextView ( type: . combo, placeholder: " 카테고리 선택 " )
6565 private let reportTitleTextView = ReportTextView ( type: . editable, placeholder: " 제보 제목을 작성해주세요. " )
66- private let reportContentTextView = ReportTextView ( type: . editable, placeholder: " 어떤 위험인지 간단히 설명해주세요. " )
66+ private let reportContentTextView = ReportTextView (
67+ type: . editable,
68+ placeholder: " 어떤 위험인지 간단히 설명해주세요. " ,
69+ maxLength: 150 )
6770 private let locationTextView = ReportTextView ( type: . nonEditable, placeholder: " 현재 위치 검색 " )
6871 private let contentTextCountLabel = UILabel ( )
6972 private let locationButton = LocationButton ( )
@@ -133,6 +136,9 @@ final class ReportRegistrationViewController: BaseViewController<ReportRegistrat
133136 let tapGesture = UITapGestureRecognizer ( target: self , action: #selector( dismissKeyboard) )
134137 tapGesture. cancelsTouchesInView = false
135138 view. addGestureRecognizer ( tapGesture)
139+
140+ NotificationCenter . default. addObserver ( self , selector: #selector( keyboardWillShow) , name: UIResponder . keyboardWillShowNotification, object: nil )
141+ NotificationCenter . default. addObserver ( self , selector: #selector( keyboardWillHide) , name: UIResponder . keyboardWillHideNotification, object: nil )
136142 }
137143
138144 override func configureLayout( ) {
@@ -514,7 +520,16 @@ final class ReportRegistrationViewController: BaseViewController<ReportRegistrat
514520 private func presentPhotoPicker( ) {
515521 var config = PHPickerConfiguration ( photoLibrary: . shared( ) )
516522 config. filter = . images
517- config. selectionLimit = 3
523+ config. selectionLimit = viewModel. output. maxPhotoCount - viewModel. selectedPhotoCount
524+
525+ guard config. selectionLimit > 0 else {
526+ let message = " 더 이상 사진을 선택할 수 없습니다. "
527+ let alertController = UIAlertController ( title: " 알림 " , message: message, preferredStyle: . alert)
528+ alertController. addAction ( UIAlertAction ( title: " 확인 " , style: . default) )
529+ self . present ( alertController, animated: true )
530+ return
531+ }
532+
518533 let picker = PHPickerViewController ( configuration: config)
519534 picker. delegate = self
520535 present ( picker, animated: true )
@@ -537,6 +552,24 @@ final class ReportRegistrationViewController: BaseViewController<ReportRegistrat
537552 @objc private func dismissKeyboard( ) {
538553 view. endEditing ( true )
539554 }
555+
556+ @objc private func keyboardWillShow( notification: NSNotification ) {
557+ guard let keyboardFrame = notification. userInfo ? [ UIResponder . keyboardFrameEndUserInfoKey] as? NSValue else { return }
558+ let keyboardHeight = keyboardFrame. cgRectValue. height
559+
560+ scrollView. contentInset. bottom = keyboardHeight
561+ scrollView. verticalScrollIndicatorInsets. bottom = keyboardHeight
562+
563+ if reportContentTextView. isFirstResponder {
564+ let targetRect = reportContentTextView. convert ( reportContentTextView. bounds, to: scrollView)
565+ scrollView. scrollRectToVisible ( targetRect, animated: true )
566+ }
567+ }
568+
569+ @objc private func keyboardWillHide( ) {
570+ scrollView. contentInset = . zero
571+ scrollView. verticalScrollIndicatorInsets = . zero
572+ }
540573}
541574
542575extension ReportRegistrationViewController : ReportTextViewDelegate {
0 commit comments