[내일배움캠프 6주차 (02/04)]

yeseul jang·2026년 2월 4일

내일배움캠프

목록 보기
9/32

📝 TIL

✅ UIButton 이벤트 처리 (addAction)

  • 버튼이 눌리는지 print문을 찍어보고 싶었는데 addTarget보단 addAction이 간단하기도하고 다른 팀원분이 사용한 것도 본적이 있어서 적용해보았다.
button.addAction(UIAction { _ in
    print("버튼 눌림")
}, for: .touchUpInside)
  • 간단한 액션일 경우 selector도 필요없고 따로 함수 만들 필요도 없어서 좋은 것 같다.

Swift === 연산자

  • 값비교가 아닌 UIButton 같은 객체 비교는 ===을 사용한다
  • 두 변수가 같은 인스턴스를 참조하는지 비교 할 수 있다.

📌 트러블 슈팅

⚠️ 버튼 색이 의도한 대로 변하지 않는 문제

  • configuration에 따로 선택 시 색을 변경해주는 핸들러가 있다는 걸 보고 바로 적용시켜보았지만 실행되지 않았다.
self.configurationUpdateHandler = { button in
            var updatedConfig = button.configuration
            
            if button.isSelected {
                updatedConfig?.baseBackgroundColor = selectedColor
            } else {
                updatedConfig?.baseBackgroundColor = baseColor
            }
            
            button.configuration = updatedConfig
        }

🔍 원인

  • print문을 사용해서 버튼은 잘 눌리고 있는 것을 확인했다.
  • 원인은 이 버튼의 상태를 업데이트 해주지 않고 있어서 발생했다.

💡 해결 방법

button.addAction(UIAction { [weak self, weak button] _ in
               
                    //... (코드 생략)
                    button.setNeedsUpdateConfiguration()
                }
            }, for: .touchUpInside)

-setNeedsUpdateConfiguration() 버튼의 상태를 업데이트 해줘서 핸들러가 색을 바꿀 수 있게 만들어 주었다.

⚠️ 여러 버튼 중 하나만 선택되게 만드는 로직

  • 앱에서 평소 많이 본 기능이라서 구현이 되어있을것이라고 생각했는데 로직을 만들어야 했다.
func setupButtons() {
        menuSection.enumerated().forEach { index, menuSection in
            let button = UIButton(title: menuSection)
            button.applySelectedColor(selectedColor: .black, baseColor: .brown)
            button.tag = index
            
            button.addAction(UIAction { [weak self, weak button] _ in
                guard let self, let selectedButton = button else { return }
                
                for button in self.menuButtons {
                    let isSameButton = (button === selectedButton)
                    button.isSelected = isSameButton
                    button.setNeedsUpdateConfiguration()
                }
            }, for: .touchUpInside)
            
            menuButtons.append(button)
            buttonStackView.addArrangedSubview(button)
        }
    }

💡 해결 방법

for button in self.menuButtons {
                    let isSameButton = (button === selectedButton)
                    button.isSelected = isSameButton
                    button.setNeedsUpdateConfiguration()
                }
  • for문으로 돌면서 해당 액션을 실행 시킨 버튼(선택된 버튼)인지 확인
  • 확인값을 버튼의 isSelected에 다시 넣어줘서 의도한 상태로 바꿔준다.
  • 마지막으로 바뀐 상태를 업데이트 해준다.
profile
iOS 개발

0개의 댓글