Skip to content

Commit adc7e57

Browse files
committed
Added: diffableTextViews_toolbarDoneButton(_:)
1 parent 7f291c2 commit adc7e57

File tree

7 files changed

+79
-9
lines changed

7 files changed

+79
-9
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ diffableTextViews_textContentType(_:)
7979
diffableTextViews_textFieldStyle(_:)
8080
diffableTextViews_textInputAutocapitalization(_:)
8181
diffableTextViews_tint(_:)
82+
diffableTextViews_toolbarDoneButton(_:)
8283
```
8384

8485
# Styles

Sources/DiffableTextKit/Utilities/Brrr.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@
1717
///
1818
public struct Brrr: Equatable {
1919

20-
public static let dismiss = Self("dismiss")
2120
public static let cancellation = Self("cancellation")
2221
public static let autocorrection = Self("autocorrection")
2322
public static let unsynchronizable = Self("unsynchronizable")
24-
23+
2524
//=------------------------------------------------------------------------=
2625

2726
#if DEBUG

Sources/DiffableTextKitXUIKit/DiffableTextField.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import SwiftUI
3232
/// - diffableTextViews_textFieldStyle(\_:)
3333
/// - diffableTextViews_textInputAutocapitalization(\_:)
3434
/// - diffableTextViews_tint(\_:)
35+
/// - diffableTextViews_toolbarDoneButton(\_:)
3536
///
3637
public struct DiffableTextField<Style: DiffableTextStyle>: UIViewRepresentable {
3738

@@ -116,7 +117,8 @@ public struct DiffableTextField<Style: DiffableTextStyle>: UIViewRepresentable {
116117
// Downstream
117118
//=----------------------------------=
118119
self.downstream.delegate = self
119-
self.downstream.textFieldStyle(environment)
120+
self.downstream.setupTextFieldStyle(environment)
121+
self.downstream.setupToolbarDoneButton(environment)
120122
//=----------------------------------=
121123
// Synchronize
122124
//=----------------------------------=

Sources/DiffableTextKitXUIKit/Environment+TextFieldStyle.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ extension EnvironmentValues {
2727
}
2828

2929
public extension View {
30-
@inlinable func diffableTextViews_textFieldStyle(_ style: UITextField.BorderStyle) -> some View {
30+
@inlinable func diffableTextViews_textFieldStyle(
31+
_ style: UITextField.BorderStyle) -> some View {
3132
environment(\.diffableTextViews_textFieldStyle, style)
3233
}
3334
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//=----------------------------------------------------------------------------=
2+
// This source file is part of the DiffableTextViews open source project.
3+
//
4+
// Copyright (c) 2022 Oscar Byström Ericsson
5+
// Licensed under Apache License, Version 2.0
6+
//
7+
// See http://www.apache.org/licenses/LICENSE-2.0 for license information.
8+
//=----------------------------------------------------------------------------=
9+
10+
#if canImport(UIKit)
11+
12+
import SwiftUI
13+
import UIKit
14+
15+
//*============================================================================*
16+
// MARK: * Environment x Toolbar Done Button [...]
17+
//*============================================================================*
18+
19+
@usableFromInline enum DiffableTextViews_ToolbarDoneButton: EnvironmentKey {
20+
@usableFromInline static let defaultValue: UIBarButtonItem.Style? = nil
21+
}
22+
23+
extension EnvironmentValues {
24+
@inlinable var diffableTextViews_toolbarDoneButton: UIBarButtonItem.Style? {
25+
get { self[DiffableTextViews_ToolbarDoneButton.self] }
26+
set { self[DiffableTextViews_ToolbarDoneButton.self] = newValue }
27+
}
28+
}
29+
30+
public extension View {
31+
@inlinable func diffableTextViews_toolbarDoneButton(
32+
_ style: UIBarButtonItem.Style = .plain) -> some View {
33+
environment(\.diffableTextViews_toolbarDoneButton, style)
34+
}
35+
}
36+
37+
#endif

Sources/DiffableTextKitXUIKit/Models/Field.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ import UIKit
4545
fatalError("init(coder:) has not been implemented")
4646
}
4747

48+
//=------------------------------------------------------------------------=
49+
// MARK: Transformations
50+
//=------------------------------------------------------------------------=
51+
52+
@usableFromInline func setupToolbarDoneButton(_ style: UIBarButtonItem.Style) {
53+
let toolbar = UIToolbar()
54+
let button = UIBarButtonItem(systemItem: .done)
55+
let spacer = UIBarButtonItem(systemItem: .flexibleSpace)
56+
let insets = UIBarButtonItem(systemItem: .fixedSpace)
57+
let dismiss = UIAction{[weak self] _ in self?.resignFirstResponder()}
58+
59+
insets.width = 8
60+
button.style = style
61+
button.primaryAction = dismiss
62+
63+
toolbar.items = [insets, spacer, button, insets]
64+
toolbar.sizeToFit()
65+
66+
self.inputAccessoryView = toolbar
67+
}
68+
4869
//=------------------------------------------------------------------------=
4970
// MARK: Events
5071
//=------------------------------------------------------------------------=

Sources/DiffableTextKitXUIKit/Streams/Downstream.swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,20 @@ import UIKit
5959
}
6060

6161
//=------------------------------------------------------------------------=
62-
// MARK: Transformations
62+
// MARK: Transformations x Setup
63+
//=------------------------------------------------------------------------=
64+
65+
@inlinable func setupTextFieldStyle(_ environment: EnvironmentValues) {
66+
self.view.borderStyle = environment.diffableTextViews_textFieldStyle
67+
}
68+
69+
@inlinable func setupToolbarDoneButton(_ environment: EnvironmentValues) {
70+
guard let style = environment.diffableTextViews_toolbarDoneButton else { return }
71+
self.view.setupToolbarDoneButton(style)
72+
}
73+
74+
//=------------------------------------------------------------------------=
75+
// MARK: Transformations x Update
6376
//=------------------------------------------------------------------------=
6477

6578
@inlinable func placeholder(_ placeholder: String) {
@@ -97,10 +110,6 @@ import UIKit
97110
self.view.textContentType = environment.diffableTextViews_textContentType
98111
}
99112

100-
@inlinable func textFieldStyle(_ environment: EnvironmentValues) {
101-
self.view.borderStyle = environment.diffableTextViews_textFieldStyle
102-
}
103-
104113
@inlinable func textInputAutocapitalization(_ environment: EnvironmentValues) {
105114
let autocapitalization = environment.diffableTextViews_textInputAutocapitalization
106115
self.view.autocapitalizationType = autocapitalization ?? .sentences

0 commit comments

Comments
 (0)