Skip to content

Commit e106826

Browse files
authored
Merge pull request #36 from kut7728/feature/#35
[FIX] #35 핀상세뷰 키보드 이슈해결, 핀편집-상세뷰 데이터 전달 수정
2 parents 5fea6d0 + 2cdfc30 commit e106826

3 files changed

Lines changed: 94 additions & 63 deletions

File tree

Pinit/Pinit/Views/PinDetail/NewPinReviewPanel.swift

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ class NewPinReviewPanel: UIView {
4545
.value
4646
textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 0))
4747
textField.leftViewMode = .always
48-
48+
textField.autocorrectionType = .no
49+
textField.autocapitalizationType = .none
50+
textField.spellCheckingType = .no
4951
textField.placeholder = "내용을 입력해주세요"
5052
return textField
5153
}()
@@ -55,21 +57,13 @@ class NewPinReviewPanel: UIView {
5557
let largeConfig = UIImage.SymbolConfiguration(pointSize: 30, weight: .bold, scale: .default)
5658
let largeImage = UIImage(systemName: "arrow.right.circle.fill")?.withConfiguration(largeConfig)
5759
button.setImage(largeImage, for: .normal)
58-
button.tintColor = .systemGreen
60+
button.tintColor = DesignSystemColor.Lavender.value
5961
return button
6062
}()
6163

62-
public lazy var topBorder: UIView = {
63-
let border = UIView()
64-
border.backgroundColor = .systemGray4
65-
return border
66-
}()
67-
68-
69-
7064
private func addComponents() {
7165
self.addSubviews(newReviewPanel)
72-
newReviewPanel.addSubviews(topBorder, reviewDate, reviewText, commitButton)
66+
newReviewPanel.addSubviews(reviewDate, reviewText, commitButton)
7367

7468

7569
newReviewPanel.snp.makeConstraints {
@@ -85,10 +79,11 @@ class NewPinReviewPanel: UIView {
8579

8680
reviewText.snp.makeConstraints {
8781
$0.top.equalTo(reviewDate.snp.bottom).offset(10)
88-
$0.width.equalTo(340)
82+
// $0.width.equalTo(340)
8983
$0.height.equalTo(40)
9084

9185
$0.leading.equalToSuperview().offset(10)
86+
$0.trailing.equalTo(commitButton.snp.leading).offset(-10)
9287

9388
}
9489

@@ -105,3 +100,7 @@ class NewPinReviewPanel: UIView {
105100
#Preview {
106101
NewPinReviewPanel()
107102
}
103+
104+
#Preview {
105+
PinDetailViewController(PinEntity.sampleData[0], isPin: true)
106+
}

Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,21 @@ final class PinDetailViewController: UIViewController {
4848
setupReviewTable()
4949
addComponents()
5050
loadReviewData()
51+
setUpKeyboard()
5152

5253
reviewPanelContainer.commitButton.addTarget(self, action: #selector(onCommitButtonTapped), for: .touchUpInside)
5354
}
5455

56+
private func setUpKeyboard() {
57+
NotificationCenter.default.addObserver(self,
58+
selector: #selector(keyboardWillShow),
59+
name: UIResponder.keyboardWillShowNotification,
60+
object: nil)
61+
NotificationCenter.default.addObserver(self,
62+
selector: #selector(keyboardWillHide),
63+
name: UIResponder.keyboardWillHideNotification,
64+
object: nil)
65+
}
5566

5667
private func loadReviewData() {
5768
self.useCase.fetchAllReviewsByPinID(pinID: self.pinEntity.pin_id) {[weak self] items in
@@ -67,15 +78,15 @@ final class PinDetailViewController: UIViewController {
6778
let lat = pinEntity.latitude
6879
let long = pinEntity.longitude
6980

70-
let center = CLLocationCoordinate2D(latitude: lat, longitude: long) // San Francisco, CA
81+
let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
7182
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005))
7283

7384
map.setRegion(region, animated: true)
7485
map.showsUserLocation = false
7586
map.isUserInteractionEnabled = false
7687

7788
let annotation = MKPointAnnotation()
78-
annotation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long) // San Francisco, CA
89+
annotation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
7990
annotation.title = pinEntity.title
8091
map.addAnnotation(annotation)
8192

@@ -175,6 +186,20 @@ extension PinDetailViewController {
175186
self.pinTableView.reloadData()
176187
}
177188

189+
@objc func doneBtnClicked() {
190+
view.endEditing(true)
191+
}
192+
193+
//MARK: 키보드가 나타낼때 화면을 -300
194+
@objc func keyboardWillShow(notification: NSNotification) {
195+
view.frame.origin.y = -200
196+
}
197+
198+
//MARK: 키보드가 사라질 때 동작
199+
@objc func keyboardWillHide(notification: NSNotification) {
200+
view.frame.origin.y = 0
201+
}
202+
178203
@objc func pinMenuButtonTapped() {
179204
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
180205

@@ -185,7 +210,7 @@ extension PinDetailViewController {
185210
self.useCase.updatePin(pin: pin)
186211
self.updatePinNoti!(self.pinEntity, pin)
187212
self.pinEntity = pin
188-
#warning("업데이트 후 헤더 업데이트 해줘야함ㅇㅇ")
213+
self.pinTableView.reloadData()
189214
}
190215
vc.modalPresentationStyle = .fullScreen
191216
self.present(vc, animated: true, completion: nil)
@@ -216,6 +241,33 @@ extension PinDetailViewController {
216241
// MARK: - Delegate
217242
extension PinDetailViewController: UITableViewDataSource, UITableViewDelegate {
218243

244+
// viewForHeaderInSection
245+
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
246+
let header = PinDetailHeader(entity: pinEntity)
247+
if !isPin {
248+
header.pinMenuButton.isHidden = true
249+
header.reviewSectionTitle.text = "방명록"
250+
}
251+
header.pinMenuButton.addTarget(self, action: #selector(pinMenuButtonTapped), for: .touchUpInside)
252+
return header
253+
}
254+
255+
256+
257+
// estimatedHeightForHeaderInSection
258+
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
259+
return 100
260+
}
261+
262+
// heightForHeaderInSection
263+
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
264+
return UITableView.automaticDimension
265+
}
266+
267+
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
268+
return 70
269+
}
270+
219271
// didSelectRowAt
220272
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
221273
tableView.deselectRow(at: indexPath, animated: false)
@@ -252,32 +304,7 @@ extension PinDetailViewController: UITableViewDataSource, UITableViewDelegate {
252304

253305
}
254306

255-
// viewForHeaderInSection
256-
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
257-
let header = PinDetailHeader(entity: pinEntity)
258-
if !isPin {
259-
header.pinMenuButton.isHidden = true
260-
header.reviewSectionTitle.text = "방명록"
261-
}
262-
header.pinMenuButton.addTarget(self, action: #selector(pinMenuButtonTapped), for: .touchUpInside)
263-
return header
264-
}
265-
266307

267-
268-
// estimatedHeightForHeaderInSection
269-
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
270-
return 100
271-
}
272-
273-
// heightForHeaderInSection
274-
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
275-
return UITableView.automaticDimension
276-
}
277-
278-
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
279-
return 70
280-
}
281308
}
282309

283310

Pinit/Pinit/Views/PinEdit/PinEditViewController.swift

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ enum PinMode {
1717

1818

1919
final class PinEditViewController: UIViewController, UITextViewDelegate {
20-
private var pinEntity: PinEntity
20+
private var pinEntity: PinEntity!
2121
var isAdded: ((PinEntity) -> Void)? // 핀추가가 됐을때 호출되는 클로저 (홈에서만 사용)
2222
private var pickedImage: UIImage?
2323

24-
private var mapView: MKMapView
24+
private var mapView: MKMapView!
2525

2626
private let saveButton : UIButton = {
2727
let button = UIButton()
@@ -41,6 +41,9 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
4141
textview.textAlignment = .center
4242
textview.textColor = UIColor.black
4343
textview.font = UIFont.systemFont(ofSize: 16)
44+
textview.autocorrectionType = .no
45+
textview.autocapitalizationType = .none
46+
textview.spellCheckingType = .no
4447
return textview
4548
}()
4649

@@ -58,6 +61,9 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
5861
.value
5962
textfield.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 16, height: 0))
6063
textfield.leftViewMode = .always
64+
textfield.autocorrectionType = .no
65+
textfield.autocapitalizationType = .none
66+
textfield.spellCheckingType = .no
6167
return textfield
6268
}()
6369

@@ -117,6 +123,16 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
117123
return toolbar
118124
}()
119125

126+
private func setImageToCameraButton(image: UIImage?) {
127+
guard let image else { return }
128+
self.pickedImage = image
129+
cameraButton.backgroundColor = .clear
130+
cameraButton.setImage(nil, for: .normal)
131+
cameraButton.clipsToBounds = true
132+
cameraButton.layer.cornerRadius = 75
133+
cameraButton.setBackgroundImage(image, for: .normal)
134+
}
135+
120136
// MARK: - viewDidLoad
121137
override func viewDidLoad() {
122138
super.viewDidLoad()
@@ -127,9 +143,10 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
127143
}
128144

129145
init(pinMode: PinMode) {
146+
super.init(nibName: nil, bundle: nil)
147+
130148
switch pinMode {
131149
case let .create(latitude, longitude):
132-
print("\(latitude), \(longitude)")
133150
self.pinEntity = PinEntity(
134151
pin_id: UUID(),
135152
title: "",
@@ -142,13 +159,14 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
142159
)
143160

144161
case let .edit(PinEntity):
145-
print(PinEntity)
146162
self.pinEntity = PinEntity
147-
print("편집 모드입니다")
148163
dateLabel.text = pinEntity.date.koreanDateString()
149164
titleTextField.text = pinEntity.title
150165
contentTextView.text = pinEntity.description
166+
self.setImageToCameraButton(image: pinEntity.mediaPath)
151167
}
168+
169+
152170
let map = MKMapView()
153171
let lat = pinEntity.latitude
154172
let long = pinEntity.longitude
@@ -165,7 +183,6 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
165183

166184
mapView = map
167185

168-
super.init(nibName: nil, bundle: nil)
169186
}
170187

171188
required init?(coder: NSCoder) {
@@ -198,8 +215,9 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
198215

199216
weatherImage.snp.makeConstraints{
200217
$0.top.equalTo(mapView.snp.bottom).offset(10)
201-
$0.leading.equalTo(view.snp.centerX).offset(100)
202-
$0.height.width.equalTo(30)
218+
// $0.leading.equalTo(view.snp.centerX).offset(100)
219+
$0.trailing.equalToSuperview().inset(20)
220+
$0.height.width.equalTo(35)
203221
}
204222

205223
dateLabel.snp.makeConstraints{
@@ -255,7 +273,6 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
255273

256274
pinEntity.title = titleTextField.text ?? ""
257275
pinEntity.description = contentTextView.text ?? ""
258-
259276
pinEntity.mediaPath = pickedImage
260277

261278
isAdded?(pinEntity)
@@ -314,7 +331,7 @@ final class PinEditViewController: UIViewController, UITextViewDelegate {
314331

315332
//MARK: 키보드가 나타낼때 화면을 -300
316333
@objc func keyboardWillShow(notification: NSNotification) {
317-
view.frame.origin.y = -300
334+
view.frame.origin.y = -250
318335
}
319336

320337
//MARK: 키보드가 사라질 때 동작
@@ -344,19 +361,7 @@ extension PinEditViewController: UIImagePickerControllerDelegate, UINavigationCo
344361

345362
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
346363
if let selectedImage = info[.editedImage] as? UIImage ?? info[.originalImage] as? UIImage {
347-
self.pickedImage = selectedImage
348-
cameraButton.backgroundColor = .clear
349-
cameraButton.setImage(nil, for: .normal)
350-
//
351-
// // 이미지를 버튼 크기에 맞게 조정하여 설정
352-
// let resizedImage = resizeImage(image: pickedImage, targetSize: CGSize(width: 150, height: 150))
353-
354-
cameraButton.clipsToBounds = true
355-
cameraButton.layer.cornerRadius = 75
356-
cameraButton.setBackgroundImage(pickedImage, for: .normal)
357-
358-
// 선택한 이미지를 pinEntity에 저장 (나중에 경로로 변환하는 로직 추가 필요)
359-
// pinEntity?.mediaPath = ...
364+
setImageToCameraButton(image: selectedImage)
360365
}
361366
picker.dismiss(animated: true, completion: nil)
362367
}

0 commit comments

Comments
 (0)