addTarget보단 addAction이 간단하기도하고 다른 팀원분이 사용한 것도 본적이 있어서 적용해보았다.button.addAction(UIAction { _ in
print("버튼 눌림")
}, for: .touchUpInside)
Swift === 연산자UIButton 같은 객체 비교는 ===을 사용한다self.configurationUpdateHandler = { button in
var updatedConfig = button.configuration
if button.isSelected {
updatedConfig?.baseBackgroundColor = selectedColor
} else {
updatedConfig?.baseBackgroundColor = baseColor
}
button.configuration = updatedConfig
}
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에 다시 넣어줘서 의도한 상태로 바꿔준다.