UIActionの状態を変更するにはどうすればよいですか?目標は、UIMenu内のUIActionの横にある状態チェックマークを切り替えることです。
state
ビューコントローラに保存されている参照を介してUIActionを変更しても、状態はまったく変更されないようです。私は何かが足りませんか?
// View Controller
internal var menuAction: UIAction!
private func generatePullDownMenu() -> UIMenu {
menuAction = UIAction(
title: "Foo",
image: UIImage(systemName: "chevron.down"),
identifier: UIAction.Identifier("come.sample.action"),
state: .on
) { _ in self.menuAction.state = .off } // <--- THIS LINE
let menu = UIMenu(
title: "Sample Menu",
image: nil,
identifier: UIMenu.Identifier("com.sample.menu"),
options: [],
children: [menuAction]
)
return menu
}
// Inside UI setup code block
let buttonItem = UIBarButtonItem(
title: "",
image: UIImage(systemName: "chevron.down"),
primaryAction: nil,
menu: generatePullDownMenu()
)
action
クロージャーから直接状態を変更しようとしましたが、「メニューの子であるため、アクションは不変です」というエラーが発生しました。今、私はアクションオブジェクトが常に不変のオブジェクトであると思います。
menuAction = UIAction(
title: "Foo",
image: UIImage(systemName: "chevron.down"),
identifier: UIAction.Identifier("come.sample.action"),
state: .on
) { action in action.state = .off } // <--- THIS LINE
UIMenu
状態が変化したときにオブジェクト全体を置き換えると、うまくいきます。
// view controller
internal var barButton: UIBarButtonItem!
// UI setup function
barButton = UIBarButtonItem(
image: UIImage(systemName: "arrow.up.arrow.down.square"),
primaryAction: nil,
menu: generatePullDownMenu()
)
// On state change inside UIAction
let actionNextSeen = UIAction(
title: "foo",
image: UIImage(systemName: "hourglass", )
state: someVariable ? .off : .on
) { _ in
someVariable = false
self.barButton.menu = self.generatePullDownMenu()
}
参照
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加