目标: 尝试创建一个筛选选择屏幕(在卡片视图中),其中包含带有UIMenu项目的UIButtons。当我选择任何一个过滤器并点击应用过滤器按钮时,我关闭过滤器视图控制器并返回到集合视图屏幕以使用所选的过滤器刷新数据。
问题: 已选择过滤器时,当我想要再次返回更改任何过滤器时,单击过滤器按钮打开过滤器视图控制器,但显然没有保留任何UIMenu选择,因为它们将被重置为默认的第一个索引设置。
如何解决? 从filterVC将我的数据传回主列表屏幕时,我传递所选UIMenu的标题。我认为我可以将其传回到filterVC并将菜单默认为传入的数据(即可以搜索标题并使其成为UIMenu中选择的UIAction),但是似乎找不到一种手动选择哪个UIAction应该是UIMenu的选择状态!
var spaceTypeMenu: UIMenu {
return UIMenu(title: "Space Type", image: nil, identifier: nil, options: [], children: spaceTypeMenuItems)
}
private var spaceTypeMenuItems: [UIAction] {
return [
UIAction(title: "All", handler: { (_) in }),
UIAction(title: "Meeting Room", handler: { (_) in }),
UIAction(title: "Desk", handler: { (_) in }),
UIAction(title: "Boardroom", handler: { (_) in })
]
}
接下来是从viewdidload()调用的内容:
func createSpaceTypeMenu() {
spaceTypeButton?.menu = spaceTypeMenu
spaceTypeButton?.showsMenuAsPrimaryAction = true
}
在选择筛选器后,我将它们传回前一个 VC:
@IBAction func applyFiltersButtonPressed(_ sender: UIButton) {
self.dismiss(animated: true) {
let filter = Filters(site: self.siteButton?.titleLabel?.text,
spaceType: self.spaceTypeButton?.titleLabel?.text,
date: self.datePickerView.datePickerView?.date,
duration: self.selectedDuration)
self.applyFiltersCallback?(filter)
}
}
Site、Spacetype和duration是所有带有UIMenu的UI按钮,这些过滤选项目前都是硬编码的。
我想要的是,在调用applyFiltersButtonPressed()以关闭VC之前,如果我选择了“Desks”,当我回到这个FiltersVC时,“Desks”仍然被选中作为UIbutton中的文本,并且想要在“Desks”旁边打勾,而不希望菜单项默认返回到第一个选项(即“All”)。
希望这样说清楚了?