728x90
SMALL
🎯 핵심 문제
button.showsMenuAsPrimaryAction = true로 설정하면,
- 버튼을 탭 → 시스템이 자동으로 메뉴를 띄움
- 우리가 직접 화살표를 "열림 🔽"으로 바꾸는 타이밍을 잡기 어려움
- 즉, menu가 뜨는 순간은 감지할 수 없고, 메뉴가 선택되고 나서만 동작할 수 있음
✅ 해결 방법: UIButton + 커스텀 메뉴 표시 방식으로 변경
👉 UIMenu를 직접 띄우지 않고, 우리가 버튼을 탭했을 때 UIAlertController나 UIPopoverPresentationController를 사용해서 직접 메뉴 UI를 만들어서 보여주는 방식으로 가면, 화살표를 자유롭게 조절할 수 있어.
@objc func showMonthMenu() {
isMenuOpen = true
updateMonthButtonTitle()
let alert = UIAlertController(title: "월 선택", message: nil, preferredStyle: .actionSheet)
for month in 1...12 {
let action = UIAlertAction(title: "\(month)월", style: .default) { [weak self] _ in
self?.selectedMonth = month
self?.isMenuOpen = false
}
alert.addAction(action)
}
let cancel = UIAlertAction(title: "취소", style: .cancel) { [weak self] _ in
self?.isMenuOpen = false
}
alert.addAction(cancel)
present(alert, animated: true)
}
❌ 이전 방법 UIMenu 사용
@objc private func showMonthMenu() {
isMenuOpen = true
// 1월 ~ 12월 항목 만들기
let actions = (1...12).map { month in
UIAction(title: "\(month)월", state: month == selectedMonth ? .on : .off) { [weak self] _ in
self?.selectedMonth = month
self?.isMenuOpen = false
// TODO: 여기서 선택된 월에 맞는 데이터 필터링 실행
}
}
let menu = UIMenu(title: "월 선택", options: .displayInline, children: actions)
monthButton.menu = menu
monthButton.showsMenuAsPrimaryAction = true // 버튼 누르면 메뉴 바로 뜨게 함
}
728x90
LIST
'Project > ReceiptMind' 카테고리의 다른 글
| 🧾 계산기 구현하기 (0) | 2025.07.17 |
|---|---|
| 💰 iOS 가계부 UI 구현기 – 선택된 항목에 따라 separator 색상 바꾸기 (1) | 2025.07.17 |
| 🤷 별도의 선택 UI를 띄우고, 값을 보여주는 용도라면? UILabel vs UITextField (2) | 2025.07.17 |
| 👍 ChartsView 생성하는 방법! (0) | 2025.07.15 |
| 🤷♂️ 사진 찍고, 뷰컨? 아니면 뷰컨 나오고, 사진 찍기? (2) | 2025.06.30 |