@@ -45,7 +45,7 @@ class CourseUploadVC: UIViewController {
4545 }
4646 private let distanceInfoView = CourseDetailInfoView ( title: " 거리 " , description: " 0.0km " )
4747 private let departureInfoView = CourseDetailInfoView ( title: " 출발지 " , description: " " )
48- private let placeholder = " 코스에 대한 소개를 적어주세요.(난이도/풍경/지형) "
48+ private let placeholder = " 코스에 대한 소개를 적어주세요.(난이도/풍경/지형) \n (최대 150자) "
4949
5050 let activityTextView = UITextView ( ) . then {
5151 $0. font = . b4
@@ -61,11 +61,10 @@ class CourseUploadVC: UIViewController {
6161 setNavigationBar ( )
6262 setUI ( )
6363 setLayout ( )
64- setupTextView ( )
64+ setDelegate ( )
6565 setAddTarget ( )
66- setKeyboardNotification ( )
6766 setTapGesture ( )
68- addKeyboardObserver ( )
67+ setKeyboardObservers ( )
6968 analyze ( screenName: GAEvent . View. viewCourseUpload)
7069 }
7170
@@ -107,29 +106,21 @@ extension CourseUploadVC {
107106 self . uploadButton. addTarget ( self , action: #selector( uploadButtonDidTap) , for: . touchUpInside)
108107 }
109108
110- // 키보드가 올라오면 scrollView 위치 조정
111- private func setKeyboardNotification( ) {
112- NotificationCenter . default. addObserver (
113- self ,
114- selector: #selector( keyboardWillShow) ,
115- name: UIResponder . keyboardWillShowNotification,
116- object: nil )
117-
118- NotificationCenter . default. addObserver (
119- self ,
120- selector: #selector( keyboardWillHide) ,
121- name: UIResponder . keyboardWillHideNotification,
122- object: nil )
123- }
124-
125109 // 화면 터치 시 키보드 내리기
126110 private func setTapGesture( ) {
127111 let tap = UITapGestureRecognizer ( target: view, action: #selector( UIView . endEditing) )
128112 tap. cancelsTouchesInView = false
129113 view. addGestureRecognizer ( tap)
130114 }
131115
132- private func addKeyboardObserver( ) {
116+ // 업로드 버튼 상태 업데이트 메소드
117+ private func updateUploadButtonState( ) {
118+ let isTitleNotEmpty = !( courseTitleTextField. text? . trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty ?? true )
119+ let isContentNotEmptyAndNotPlaceholder = !( activityTextView. text. trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty || activityTextView. text == placeholder)
120+ uploadButton. setEnabled ( isTitleNotEmpty && isContentNotEmptyAndNotPlaceholder)
121+ }
122+
123+ private func setKeyboardObservers( ) {
133124 NotificationCenter . default. addObserver (
134125 self ,
135126 selector: #selector( keyboardWillShow) ,
@@ -141,13 +132,6 @@ extension CourseUploadVC {
141132 name: UIResponder . keyboardWillHideNotification,
142133 object: nil )
143134 }
144-
145- // 업로드 버튼 상태 업데이트 메소드
146- private func updateUploadButtonState( ) {
147- let isTitleNotEmpty = !( courseTitleTextField. text? . trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty ?? true )
148- let isContentNotEmptyAndNotPlaceholder = !( activityTextView. text. trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty || activityTextView. text == placeholder)
149- uploadButton. setEnabled ( isTitleNotEmpty && isContentNotEmptyAndNotPlaceholder)
150- }
151135}
152136// MARK: - @objc Function
153137
@@ -170,11 +154,12 @@ extension CourseUploadVC {
170154 scrollView. contentInset = contentInset
171155 scrollView. scrollIndicatorInsets = contentInset
172156
173- if activityTextView. isFirstResponder {
157+ // scrollView 높이 설정
158+ if courseTitleTextField. isFirstResponder || activityTextView. isFirstResponder {
174159 let contentViewHeight = scrollView. contentSize. height
175160 let textViewHeight = activityTextView. frame. height
176161 let textViewOffsetY = contentViewHeight - ( contentInset. bottom + textViewHeight)
177- let position = CGPoint ( x: 0 , y: textViewOffsetY + 100 )
162+ let position = CGPoint ( x: 0 , y: textViewOffsetY + 50 )
178163 scrollView. setContentOffset ( position, animated: true )
179164 return
180165 }
@@ -212,6 +197,8 @@ extension CourseUploadVC {
212197 buttonContainerView. backgroundColor = . w1
213198 mapImageView. backgroundColor = . systemGray4
214199
200+ activityTextView. text = placeholder
201+ activityTextView. textColor = . g3
215202 }
216203
217204 private func setLayout( ) {
@@ -235,14 +222,15 @@ extension CourseUploadVC {
235222
236223 private func setScrollViewLayout( ) {
237224 view. addSubview ( scrollView)
238- [ mapImageView,
239- courseTitleTextField,
240- dividerView,
241- distanceInfoView,
242- departureInfoView,
243- activityTextView] . forEach {
244- scrollView. addSubview ( $0)
245- }
225+
226+ scrollView. addSubviews (
227+ mapImageView,
228+ courseTitleTextField,
229+ dividerView,
230+ distanceInfoView,
231+ departureInfoView,
232+ activityTextView
233+ )
246234
247235 scrollView. snp. makeConstraints {
248236 $0. top. equalTo ( navibar. snp. bottom)
@@ -288,10 +276,9 @@ extension CourseUploadVC {
288276 }
289277 }
290278
291- func setupTextView ( ) {
279+ func setDelegate ( ) {
292280 activityTextView. delegate = self
293- activityTextView. text = placeholder
294- activityTextView. textColor = . g3
281+ courseTitleTextField. delegate = self
295282 }
296283}
297284
@@ -325,6 +312,18 @@ extension CourseUploadVC: UITextViewDelegate {
325312 }
326313}
327314
315+ // MARK: - UITextFieldDelegate
316+
317+ extension CourseUploadVC : UITextFieldDelegate {
318+ func textFieldShouldReturn( _ textField: UITextField ) -> Bool {
319+ if textField == courseTitleTextField {
320+ activityTextView. becomeFirstResponder ( )
321+ return true
322+ }
323+ return false
324+ }
325+ }
326+
328327// MARK: - Network
329328
330329extension CourseUploadVC {
0 commit comments