Use context menu for visibility on iOS 14
This commit is contained in:
parent
3d13df87f0
commit
d008b882cb
|
@ -116,9 +116,15 @@ class ComposeHostingController: UIHostingController<ComposeContainerView> {
|
||||||
let toolbar = UIToolbar()
|
let toolbar = UIToolbar()
|
||||||
toolbar.translatesAutoresizingMaskIntoConstraints = false
|
toolbar.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
|
||||||
let visibilityItem = UIBarButtonItem(image: UIImage(systemName: draft.visibility.imageName), style: .plain, target: self, action: #selector(visibilityButtonPressed))
|
let visibilityAction: Selector?
|
||||||
visibilityItem.accessibilityLabel = String(format: NSLocalizedString("Visibility: %@", comment: "compose visiblity accessibility label"), draft.visibility.displayName)
|
if #available(iOS 14.0, *) {
|
||||||
|
visibilityAction = nil
|
||||||
|
} else {
|
||||||
|
visibilityAction = #selector(visibilityButtonPressed(_:))
|
||||||
|
}
|
||||||
|
let visibilityItem = UIBarButtonItem(image: UIImage(systemName: draft.visibility.imageName), style: .plain, target: self, action: visibilityAction)
|
||||||
visibilityBarButtonItems.append(visibilityItem)
|
visibilityBarButtonItems.append(visibilityItem)
|
||||||
|
visibilityChanged(draft.visibility)
|
||||||
|
|
||||||
toolbar.items = [
|
toolbar.items = [
|
||||||
UIBarButtonItem(title: "CW", style: .plain, target: self, action: #selector(cwButtonPressed)),
|
UIBarButtonItem(title: "CW", style: .plain, target: self, action: #selector(cwButtonPressed)),
|
||||||
|
@ -185,6 +191,15 @@ class ComposeHostingController: UIHostingController<ComposeContainerView> {
|
||||||
for item in visibilityBarButtonItems {
|
for item in visibilityBarButtonItems {
|
||||||
item.image = UIImage(systemName: newVisibility.imageName)
|
item.image = UIImage(systemName: newVisibility.imageName)
|
||||||
item.accessibilityLabel = String(format: NSLocalizedString("Visibility: %@", comment: "compose visiblity accessibility label"), draft.visibility.displayName)
|
item.accessibilityLabel = String(format: NSLocalizedString("Visibility: %@", comment: "compose visiblity accessibility label"), draft.visibility.displayName)
|
||||||
|
if #available(iOS 14.0, *) {
|
||||||
|
let elements = Status.Visibility.allCases.map { (visibility) -> UIMenuElement in
|
||||||
|
let state = visibility == newVisibility ? UIMenuElement.State.on : .off
|
||||||
|
return UIAction(title: visibility.displayName, image: UIImage(systemName: visibility.unfilledImageName), identifier: nil, discoverabilityTitle: nil, attributes: [], state: state) { (_) in
|
||||||
|
self.draft.visibility = visibility
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item.menu = UIMenu(title: "", image: nil, identifier: nil, options: [], children: elements)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,12 +232,15 @@ class ComposeHostingController: UIHostingController<ComposeContainerView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func visibilityButtonPressed(_ sender: UIBarButtonItem) {
|
@objc func visibilityButtonPressed(_ sender: UIBarButtonItem) {
|
||||||
|
// if #available(iOS 14.0, *) {
|
||||||
|
// } else {
|
||||||
let alertController = UIAlertController(currentVisibility: draft.visibility) { (visibility) in
|
let alertController = UIAlertController(currentVisibility: draft.visibility) { (visibility) in
|
||||||
guard let visibility = visibility else { return }
|
guard let visibility = visibility else { return }
|
||||||
self.draft.visibility = visibility
|
self.draft.visibility = visibility
|
||||||
}
|
}
|
||||||
alertController.popoverPresentationController?.barButtonItem = sender
|
alertController.popoverPresentationController?.barButtonItem = sender
|
||||||
present(alertController, animated: true)
|
present(alertController, animated: true)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func draftsButtonPresed() {
|
@objc func draftsButtonPresed() {
|
||||||
|
|
|
@ -64,7 +64,14 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
||||||
textView.textContainer.lineBreakMode = .byWordWrapping
|
textView.textContainer.lineBreakMode = .byWordWrapping
|
||||||
context.coordinator.textView = textView
|
context.coordinator.textView = textView
|
||||||
|
|
||||||
let visibilityButton = UIBarButtonItem(image: UIImage(systemName: visibility.imageName), style: .plain, target: nil, action: #selector(ComposeHostingController.visibilityButtonPressed(_:)))
|
let visibilityAction: Selector?
|
||||||
|
if #available(iOS 14.0, *) {
|
||||||
|
visibilityAction = nil
|
||||||
|
} else {
|
||||||
|
visibilityAction = #selector(ComposeHostingController.visibilityButtonPressed(_:))
|
||||||
|
}
|
||||||
|
let visibilityButton = UIBarButtonItem(image: UIImage(systemName: visibility.imageName), style: .plain, target: nil, action: visibilityAction)
|
||||||
|
updateVisibilityMenu(visibilityButton)
|
||||||
let toolbar = UIToolbar()
|
let toolbar = UIToolbar()
|
||||||
toolbar.translatesAutoresizingMaskIntoConstraints = false
|
toolbar.translatesAutoresizingMaskIntoConstraints = false
|
||||||
toolbar.items = [
|
toolbar.items = [
|
||||||
|
@ -118,6 +125,18 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
||||||
return formatButtons
|
return formatButtons
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func updateVisibilityMenu(_ visibilityButton: UIBarButtonItem) {
|
||||||
|
if #available(iOS 14.0, *) {
|
||||||
|
let elements = Status.Visibility.allCases.map { (visibility) -> UIMenuElement in
|
||||||
|
let state = visibility == self.visibility ? UIMenuElement.State.on : .off
|
||||||
|
return UIAction(title: visibility.displayName, image: UIImage(systemName: visibility.unfilledImageName), identifier: nil, discoverabilityTitle: nil, attributes: [], state: state) { (_) in
|
||||||
|
self.uiState.draft.visibility = visibility
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visibilityButton.menu = UIMenu(title: "", image: nil, identifier: nil, options: [], children: elements)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func updateUIView(_ uiView: UITextView, context: Context) {
|
func updateUIView(_ uiView: UITextView, context: Context) {
|
||||||
uiView.text = text
|
uiView.text = text
|
||||||
visibilityButton?.image = UIImage(systemName: visibility.imageName)
|
visibilityButton?.image = UIImage(systemName: visibility.imageName)
|
||||||
|
|
Loading…
Reference in New Issue