Попытка создать раскрывающееся меню, которое отображает параметры при нажатии кнопки

#swift

Вопрос:

Я пытаюсь создать выпадающее меню, в котором при нажатии кнопки «Выбрать» выпадают два варианта. Я хочу, чтобы эти параметры были кнопкой расписания и кнопкой отчета о расходах. Я не могу заставить его работать, вот мой код.

 import UIKit

class SecondViewController: UIViewController {
    
    
    @IBOutlet weak var SelectBTN: UIButton!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBAction func handleSelection(_ sender: UIButton) {
        
        SelectBTN.ForEach { (button) in
            
            UIView.animate(withDuration: 0.3, animations: {
                button.isHidden = !button.isHidden
                self.view.layoutIfNeeded()
            })
            
        }
        

    }
    
    
    
    @IBAction func cityTapped(_ sender: UIButton) {
    }
    
    
    
    @IBAction func ERBTNpressed(_ sender: UIButton) {
        self.performSegue(withIdentifier: "ERSegue", sender: self)
    }
    
    
    @IBAction func TSBTNpressed(_ sender: UIButton) {
        self.performSegue(withIdentifier: "TSSegue", sender: self)
    }
    
}
 

Комментарии:

1. Добро пожаловать в Stack Overflow. Действительно ли необходимы все эти пустые строки в коде? Если нет, рассмотрите возможность редактирования записи, обрезав некоторые из этих пустых строк.

Ответ №1:

Вы можете установить меню в качестве основного действия для кнопки в viewDidLoad :

 SelectBTN.showsMenuAsPrimaryAction = true
SelectBTN.menu = buttonMenu()
 

В меню вы можете добавить действия:

 func buttonMenu() -> UIMenu {
    let ERAction = UIAction(title: "Expense report", image: nil) { (_) in
        self.performSegue(withIdentifier: "ERSegue", sender: self)
    }
    
    let TSAction = UIAction(title: "Timesheet", image: nil) { (_) in
        self.performSegue(withIdentifier: "TSSegue", sender: self)
    }
    
    return UIMenu(title: "", options: .displayInline, children: [ERAction, TSAction])
}
 

Вы также можете добавлять изображения в действия и указывать атрибуты (например .destructive , для действия удаления).