일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- uikit toast
- claen architecture
- 타임라인 포맷팅
- identifiable
- reactorkit
- swift bottomsheet
- DP
- Tuist
- swift 점선
- 버튼 피드백
- rxdatasources
- swift concurrency
- swift custom ui
- swift dashed line
- scene delegate
- task cancellation
- custom navigation bar
- UIKit
- custom ui
- RxSwift
- traits
- SWIFT
- custombottomsheet
- button configuration
- BFS
- task cancel
- domain data
- swift 백준
- swift navigationcontroller
- coordinator
- Today
- Total
김경록의 앱 개발 여정
[Swift UIKit] Button 터치 피드백이 안보이는 경우 본문
🔊 개요
앱을 만들 때 Button은 필수적이고, 자동으로 터치 피드백을 제공합니다.(눌렸을 때 색깔이 바뀐다던가)
하지만 종종 버튼을 눌렀을 때 아무런 반응이 없는 것처럼 보이는 문제를 겪게 되죠.
그럴 땐 대부분 아래 이유 중 하나입니다.
👇 1. AttributedString에서 색상을 직접 지정한 경우(configuraton 사용 시)
configuration 사용 시 폰트를 지정할 때 AttriibutedString을 사용하게 됩니다.
그때 foregroundColor 또한 지정이 가능하며 이것으로 글자색을 바꿀 수도 있습니다.
let attributedTitle = AttributedString(
"이미지",
attributes: AttributeContainer([
.font: UIFont.et_pretendard(style: .medium, size: 18),
.foregroundColor: UIColor.et_textColor5
])
)
configuration.attributedTitle = attributedTitle
하지만 이렇게 하면 터치됐을 때 버튼의 상태가. highlighted로 바뀌어도 텍스트 색상은 그대로입니다.
시스템이 자동으로 상태별 색을 조정하지 못해요
✅ 해결 방법
var attributedTitle = AttributedString("이미지")
attributedTitle.font = UIFont....
configuration.attributedTitle = attributedTitle
configuration.baseForegroundColor = UIColor...
- AttributedStrign이 아닌, configuration의 컬러를 바꿔줌으로 해결
👇 2. 버튼 위에 다른 뷰가 덮여 있는 경우 (터치 전달 문제)
가장 흔하지만 간과되는 문제입니다. 버튼은 잘 만들어졌지만, 다른 뷰가 버튼 위에 있어서 터치 이벤트가 가로 차일 수 있습니다.
🛠 체크리스트
- 버튼 위에 UIView, UILabel, UIImageView 등이 isUserInteractionEnabled = true로 되어 있고, 투명한 경우
- 오토레이아웃 제약이 잘못돼서 버튼이 실제로는 안 보이는 곳에 있거나, 작게 눌려 있음
- clipsToBounds, alpha, hidden 속성으로 인해 버튼이 뷰 계층상 보이지만 동작 안 함
✅ 해결 방법
- Xcode의 Debug View Hierarchy를 열어서 버튼 위에 어떤 뷰가 있는지 시각적으로 확인
- 덮는 뷰가 있다면 isUserInteractionEnabled = false로 설정
- 필요시 버튼을 superview의 가장 앞쪽으로 올림:
view.bringSubviewToFront(addLinkButton)
👇 3. 버튼 자체가 지나치게 작거나 레이아웃이 어긋남
버튼 레이아웃이 너무 타이트하면 눌렀을 때 효과도 작게 느껴지거나 아예 반응이 없어 보일 수 있습니다.
또한 레이아웃이 완벽히 잡혀있지 않으면 버튼 피드백이 보이지 않을 수 있습니다.
✅ 해결 방법
- 레이아웃 점검하기!
🧾 정리: 버튼 터치 피드백이 안 보일 때 체크리스트
.attributedTitle에서 색상 지정 | baseForegroundColor만 사용 |
배경 피드백 없음 | backgroundColorTransformer 설정 |
다른 뷰가 덮고 있음 | Debug View Hierarchy 확인, 덮는 뷰 isUserInteractionEnabled = false |
버튼이 너무 작거나 인셋 없음 | contentInsets, imagePadding 설정 |
버튼이 안 보이는 계층 구조에 위치해 있음 | bringSubviewToFront(button) 또는 레이아웃 수정 |
✨ 마무리
버튼이 눌리는 동작은 정상적으로 수행되지만, 터치 피드백이 사용자에게 보이지 않는 경우가 있습니다.
이러한 시각적 피드백은 사용자 경험(UX)에 있어 매우 중요한 요소입니다.
버튼을 눌렀을 때 아무런 변화가 없다면, 사용자 입장에서는 "정말 눌린 게 맞나?" 하는 불안감을 느낄 수 있기 때문이죠.
기존에 잘 작동하던 버튼이 갑자기 피드백이 보이지 않게 되었다면, 어딘가 실수가 있었던 것일 가능성이 높습니다.
이럴 때는 단순히 "작동하니까 괜찮다"는 생각보다, 왜 피드백이 사라졌는지 하나씩 체크해 보는 습관을 들이는 것이 좋습니다.
작은 디테일이 전체 사용자 경험의 완성도를 결정짓습니다.
'Trouble Shooting' 카테고리의 다른 글
[Swift MVVM] UI와 독립적인 ViewModel, 어디까지 고려해야 할까? (feat. ReactorKit) (0) | 2025.04.17 |
---|---|
[Swift UIKit] 앱 전반에서 사용 될 Toast Message 구현기 (0) | 2025.04.16 |
[Swift UIKit] 점선 스타일 보더 적용하기(Dashed Border Style) (0) | 2025.04.16 |
[Swift UIKit] Custom Bottom Sheet (0) | 2025.04.11 |
[Swift UIKit] 앱 전반에서 사용되는 Custom NavigationContoller (0) | 2025.04.11 |