1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
//
// UIBarButtonItem+KeyboardNavigation.swift
// MullvadVPN
//
// Created by pronebird on 24/02/2021.
// Copyright © 2021 Mullvad VPN AB. All rights reserved.
//
import UIKit
extension UIBarButtonItem {
enum KeyboardNavigationItemType {
case previous, next
fileprivate var localizedTitle: String {
switch self {
case .previous:
return NSLocalizedString(
"PREVIOUS_BUTTON_TITLE",
tableName: "KeyboardNavigation",
value: "Previous",
comment: "Previous button"
)
case .next:
return NSLocalizedString(
"NEXT_BUTTON_TITLE",
tableName: "KeyboardNavigation",
value: "Next",
comment: "Next button"
)
}
}
fileprivate var systemImage: UIImage? {
switch self {
case .previous:
return UIImage(systemName: "chevron.up")
case .next:
return UIImage(systemName: "chevron.down")
}
}
}
convenience init(
keyboardNavigationItemType: KeyboardNavigationItemType,
target: Any?,
action: Selector?
) {
self.init(
image: keyboardNavigationItemType.systemImage,
style: .plain,
target: target,
action: action
)
accessibilityLabel = keyboardNavigationItemType.localizedTitle
}
static func makeKeyboardNavigationItems(_ configurationBlock: (
_ prevItem: UIBarButtonItem,
_ nextItem: UIBarButtonItem
) -> Void) -> [UIBarButtonItem] {
let prevButton = UIBarButtonItem(keyboardNavigationItemType: .previous, target: nil, action: nil)
let nextButton = UIBarButtonItem(keyboardNavigationItemType: .next, target: nil, action: nil)
configurationBlock(prevButton, nextButton)
let spacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
spacer.width = 8
return [prevButton, spacer, nextButton]
}
}
|