Skip to content

Commit 3362e3e

Browse files
fixed a bug with jumping keyboard
1 parent 98fca5d commit 3362e3e

File tree

5 files changed

+19
-54
lines changed

5 files changed

+19
-54
lines changed

Sources/StreamChatSwiftUI/ChatChannel/Composer/ComposerTextInputView.swift

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ struct ComposerTextInputView: UIViewRepresentable {
1010
@Binding var text: String
1111
@Binding var height: CGFloat
1212
@Binding var selectedRangeLocation: Int
13-
@Binding var isFirstResponder: Bool
1413

1514
var placeholder: String
1615

@@ -30,30 +29,21 @@ struct ComposerTextInputView: UIViewRepresentable {
3029
uiView.selectedRange.location = selectedRangeLocation
3130
uiView.text = text
3231
uiView.handleTextChange()
33-
switch isFirstResponder {
34-
case true: uiView.becomeFirstResponder()
35-
case false: uiView.resignFirstResponder()
36-
}
3732
}
3833
}
3934
}
4035

4136
func makeCoordinator() -> Coordinator {
42-
Coordinator(textInput: self, isFirstResponder: $isFirstResponder)
37+
Coordinator(textInput: self)
4338
}
4439

4540
class Coordinator: NSObject, UITextViewDelegate, NSLayoutManagerDelegate {
4641
weak var textView: InputTextView?
4742

4843
var textInput: ComposerTextInputView
49-
var isFirstResponder: Binding<Bool>
5044

51-
init(
52-
textInput: ComposerTextInputView,
53-
isFirstResponder: Binding<Bool>
54-
) {
45+
init(textInput: ComposerTextInputView) {
5546
self.textInput = textInput
56-
self.isFirstResponder = isFirstResponder
5747
}
5848

5949
func textViewDidChange(_ textView: UITextView) {
@@ -69,14 +59,6 @@ struct ComposerTextInputView: UIViewRepresentable {
6959
true
7060
}
7161

72-
func textViewDidBeginEditing(_ textView: UITextView) {
73-
isFirstResponder.wrappedValue = true
74-
}
75-
76-
func textViewDidEndEditing(_ textView: UITextView) {
77-
isFirstResponder.wrappedValue = false
78-
}
79-
8062
func layoutManager(
8163
_ layoutManager: NSLayoutManager,
8264
didCompleteLayoutFor textContainer: NSTextContainer?,

Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public struct MessageComposerView<Factory: ViewFactory>: View, KeyboardReadable
6060
factory.makeComposerInputView(
6161
text: $viewModel.text,
6262
selectedRangeLocation: $viewModel.selectedRangeLocation,
63-
isFirstResponder: $viewModel.isFirstResponder,
6463
command: $viewModel.composerCommand,
6564
addedAssets: viewModel.addedAssets,
6665
addedFileURLs: viewModel.addedFileURLs,
@@ -170,7 +169,6 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
170169
var factory: Factory
171170
@Binding var text: String
172171
@Binding var selectedRangeLocation: Int
173-
@Binding var isFirstResponder: Bool
174172
@Binding var command: ComposerCommand?
175173
var addedAssets: [AddedAsset]
176174
var addedFileURLs: [URL]
@@ -232,10 +230,10 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
232230
)
233231
}
234232

235-
if let command = command,
236-
let displayInfo = command.displayInfo,
237-
displayInfo.isInstant == true {
238-
HStack {
233+
HStack {
234+
if let command = command,
235+
let displayInfo = command.displayInfo,
236+
displayInfo.isInstant == true {
239237
HStack(spacing: 0) {
240238
Image(uiImage: images.smallBolt)
241239
Text(displayInfo.displayName.uppercased())
@@ -246,16 +244,17 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
246244
.background(Color.blue)
247245
.foregroundColor(.white)
248246
.cornerRadius(16)
249-
250-
ComposerTextInputView(
251-
text: $text,
252-
height: $textHeight,
253-
selectedRangeLocation: $selectedRangeLocation,
254-
isFirstResponder: $isFirstResponder,
255-
placeholder: L10n.Composer.Placeholder.message
256-
)
257-
.frame(height: textFieldHeight)
258-
.overlay(
247+
}
248+
249+
ComposerTextInputView(
250+
text: $text,
251+
height: $textHeight,
252+
selectedRangeLocation: $selectedRangeLocation,
253+
placeholder: L10n.Composer.Placeholder.message
254+
)
255+
.frame(height: textFieldHeight)
256+
.overlay(
257+
command?.displayInfo?.isInstant == true ?
259258
HStack {
260259
Spacer()
261260
Button {
@@ -266,18 +265,10 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
266265
)
267266
}
268267
}
269-
)
270-
}
271-
} else {
272-
ComposerTextInputView(
273-
text: $text,
274-
height: $textHeight,
275-
selectedRangeLocation: $selectedRangeLocation,
276-
isFirstResponder: $isFirstResponder,
277-
placeholder: L10n.Composer.Placeholder.message
268+
: nil
278269
)
279-
.frame(height: textFieldHeight)
280270
}
271+
.frame(height: textFieldHeight)
281272
}
282273
.padding(.vertical, shouldAddVerticalPadding ? 8 : 0)
283274
.padding(.leading, 8)

Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public class MessageComposerViewModel: ObservableObject {
5050
}
5151

5252
@Published var selectedRangeLocation: Int = 0
53-
@Published var isFirstResponder = false
5453

5554
@Published var addedFileURLs = [URL]() {
5655
didSet {
@@ -98,9 +97,6 @@ public class MessageComposerViewModel: ObservableObject {
9897
if oldValue?.id != composerCommand?.id &&
9998
composerCommand?.displayInfo?.isInstant == true {
10099
text = ""
101-
if isFirstResponder == false {
102-
isFirstResponder = true
103-
}
104100
}
105101
if oldValue != nil && composerCommand == nil {
106102
pickerTypeState = .expanded(.none)

Sources/StreamChatSwiftUI/DefaultViewFactory.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@ extension ViewFactory {
270270
public func makeComposerInputView(
271271
text: Binding<String>,
272272
selectedRangeLocation: Binding<Int>,
273-
isFirstResponder: Binding<Bool>,
274273
command: Binding<ComposerCommand?>,
275274
addedAssets: [AddedAsset],
276275
addedFileURLs: [URL],
@@ -286,7 +285,6 @@ extension ViewFactory {
286285
factory: self,
287286
text: text,
288287
selectedRangeLocation: selectedRangeLocation,
289-
isFirstResponder: isFirstResponder,
290288
command: command,
291289
addedAssets: addedAssets,
292290
addedFileURLs: addedFileURLs,
@@ -302,7 +300,6 @@ extension ViewFactory {
302300
factory: self,
303301
text: text,
304302
selectedRangeLocation: selectedRangeLocation,
305-
isFirstResponder: isFirstResponder,
306303
command: command,
307304
addedAssets: addedAssets,
308305
addedFileURLs: addedFileURLs,

Sources/StreamChatSwiftUI/ViewFactory.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ public protocol ViewFactory: AnyObject {
263263
func makeComposerInputView(
264264
text: Binding<String>,
265265
selectedRangeLocation: Binding<Int>,
266-
isFirstResponder: Binding<Bool>,
267266
command: Binding<ComposerCommand?>,
268267
addedAssets: [AddedAsset],
269268
addedFileURLs: [URL],

0 commit comments

Comments
 (0)