@@ -19,6 +19,7 @@ enum NaviType {
1919 case title // 좌측 타이틀
2020 case titleWithLeftButton // 뒤로가기 버튼 + 중앙 타이틀
2121 case search // 검색창
22+ case report // 신고
2223}
2324
2425final class CustomNavigationBar : UIView {
@@ -30,13 +31,15 @@ final class CustomNavigationBar: UIView {
3031 private var vc : UIViewController ?
3132 private var leftButtonClosure : ( ( ) -> Void ) ?
3233 private var rightButtonClosure : ( ( ) -> Void ) ?
34+ private var reportButtonClosure : ( ( ) -> Void ) ?
3335
3436 // MARK: - UI Components
3537
3638 private let leftTitleLabel = UILabel ( )
3739 private let centerTitleLabel = UILabel ( )
3840 private let leftButton = UIButton ( )
3941 private let rightButton = UIButton ( )
42+ private let reportButton = UIButton ( )
4043 private let textField = UITextField ( )
4144
4245 // MARK: - initialization
@@ -62,13 +65,14 @@ extension CustomNavigationBar {
6265 UIView . animate ( withDuration: 0.1 ,
6366 delay: 0 ,
6467 options: . curveEaseInOut) {
65- [ self . leftTitleLabel, self . centerTitleLabel, self . leftButton, self . rightButton] . forEach { $0. alpha = isHidden ? 0 : 1 }
68+ [ self . leftTitleLabel, self . centerTitleLabel, self . leftButton, self . rightButton, self . reportButton ] . forEach { $0. alpha = isHidden ? 0 : 1 }
6669 }
6770 }
6871
6972 private func setAddTarget( ) {
7073 self . leftButton. addTarget ( self , action: #selector( popToPreviousVC) , for: . touchUpInside)
7174 self . rightButton. addTarget ( self , action: #selector( searchLocation) , for: . touchUpInside)
75+ self . reportButton. addTarget ( self , action: #selector( reportLocation) , for: . touchUpInside)
7276 }
7377
7478 private func setDelegate( ) {
@@ -136,6 +140,24 @@ extension CustomNavigationBar {
136140 self . textField. resignFirstResponder ( )
137141 return self
138142 }
143+
144+ @discardableResult
145+ func resetReportButtonAction( _ closure: ( ( ) -> Void ) ? = nil ) -> Self {
146+ self . reportButtonClosure = closure
147+ self . reportButton. removeTarget ( self , action: nil , for: . touchUpInside)
148+ if closure != nil {
149+ self . reportButton. addTarget ( self , action: #selector( reportButtonDidTap) , for: . touchUpInside)
150+ } else {
151+ self . setAddTarget ( )
152+ }
153+ return self
154+ }
155+
156+ @discardableResult
157+ func hideReportButton( ) -> Self {
158+ self . reportButton. isHidden = true
159+ return self
160+ }
139161}
140162
141163// MARK: - @objc Function
@@ -151,13 +173,21 @@ extension CustomNavigationBar {
151173 delegate? . searchButtonDidTap ( text: text)
152174 }
153175
176+ @objc private func reportLocation( ) {
177+ self . reportButtonClosure ? ( )
178+
179+ }
180+
154181 @objc private func rightButtonDidTap( ) {
155182 self . rightButtonClosure ? ( )
156183 }
157184
158185 @objc private func leftButtonDidTap( ) {
159186 self . leftButtonClosure ? ( )
160187 }
188+ @objc private func reportButtonDidTap( ) {
189+ self . reportButtonClosure ? ( )
190+ }
161191}
162192
163193// MARK: - UI & Layout
@@ -187,6 +217,10 @@ extension CustomNavigationBar {
187217 textField. textColor = . g1
188218 textField. addLeftPadding ( width: 2 )
189219 rightButton. setImage ( ImageLiterals . icSearch, for: . normal)
220+
221+ case . report:
222+ reportButton. setImage ( ImageLiterals . icArrowBack, for: . normal)
223+ reportButton. isHidden = false
190224 }
191225 }
192226
@@ -198,6 +232,8 @@ extension CustomNavigationBar {
198232 setTitleWithLeftButtonLayout ( )
199233 case . search:
200234 setSearchLayout ( )
235+ case . report:
236+ setReportButtonLayout ( )
201237 }
202238 }
203239
@@ -245,6 +281,21 @@ extension CustomNavigationBar {
245281 make. trailing. equalTo ( rightButton. snp. leading)
246282 }
247283 }
284+
285+ private func setReportButtonLayout( ) {
286+ self . addSubviews ( leftButton, reportButton)
287+ leftButton. snp. makeConstraints { make in
288+ make. centerY. equalToSuperview ( )
289+ make. leading. equalToSuperview ( )
290+ make. width. height. equalTo ( 48 )
291+ }
292+ reportButton. snp. makeConstraints { make in
293+ make. centerY. equalToSuperview ( )
294+ make. trailing. equalToSuperview ( )
295+ make. width. height. equalTo ( 48 )
296+ }
297+
298+ }
248299}
249300
250301// MARK: - UITextFieldDelegate
0 commit comments