Skip to content

Commit 922e685

Browse files
committed
[Fix] #265 - 중복 코드 제거 & 유저 편의성 개선
1 parent 3ad2e31 commit 922e685

1 file changed

Lines changed: 39 additions & 40 deletions

File tree

Runnect-iOS/Runnect-iOS/Presentation/CourseDiscovery/Views/VC/CourseUploadVC.swift

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

330329
extension CourseUploadVC {

0 commit comments

Comments
 (0)