【发布时间】:2021-12-17 06:54:04
【问题描述】:
目标: 尝试创建一个过滤器选择屏幕(在卡片视图中),其中包含带有 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”。
希望这有意义吗?
【问题讨论】:
标签: ios swift xcode uimenu uiaction